MS access 2010 SQL查询帮助

Posted

技术标签:

【中文标题】MS access 2010 SQL查询帮助【英文标题】:MS access 2010 SQL query Help 【发布时间】:2011-07-04 12:26:18 【问题描述】:

我怎样才能从这个表格中转一张桌子:

S_ID          SUBJECT          MARK
1             English          90
1             Math             40
1             Computer         30
2             English          85
2             Math             10
2             Computer         06
3             English          10
3             Math             20
3             Computer         40

到这个表格

S_ID       English        Math         Computer
1          90             40           30
2          85             10           06
3          10             20           40

使用 SQL 代码,

我使用的是 MS Access 2010,

谢谢

【问题讨论】:

【参考方案1】:
SELECT S_ID ,
       MAX(CASE WHEN subject = 'English' THEN mark ELSE null END) AS English,
       MAX(CASE WHEN subject = 'Math' THEN mark ELSE null END) AS Math,
       MAX(CASE WHEN subject = 'Computer' THEN mark ELSE null END) AS Computer
FROM myTable
GROUP BY S_ID 

【讨论】:

+1 可以省略else null,不匹配的case默认返回null 期待测试一下,谢谢 :) @HansUp :Access 支持 SWITCH 语句,和 CASE WHEN 一样吗? Scorpi0:如果您要添加一个ELSE null 子句,那么您不应该也将null 转换为与mark 相同的类型吗? @onedaywhen :说真的,投一个 null ?你是认真的吗? ...请注意,Access 数据库引擎(ACE、Jet 等)均不支持 CASE 和类型转换 NULL【参考方案2】:

您需要一个交叉表查询,它会为每个主题生成一列;

TRANSFORM Sum(MARK) AS TotalMark
SELECT 
   S_ID
FROM marks
   GROUP BY S_ID
PIVOT SUBJECT;

【讨论】:

-虽然它有效,但我正在寻找适用于 mysql 的东西,更通用的 SQL 方法非常感谢您的回复,当然也投了赞成票 :) -另一件事是我不想要总数(交叉表),我想要一个学生的“列表”,如我的问题所示。 :) 只要每个学生每个科目有一个标记,那么SUM() 就可以了,因为你只会对一个值求和,另一个像MIN()/MAX() 这样的聚合同样会给出同样的结果。对于 mySQL,您可以使用 Scorpi0 的答案将 CASE 替换为 sum( if(itemname = 'english', mark, 0)) - 访问也有类似的 iif() - 我怀疑您是否会找到一种优雅的跨数据库方式,特别是如果其中一个是访问。 “我怀疑您是否会找到一种优雅的跨数据库方式,特别是如果其中之一是 Access。”完全同意【参考方案3】:

如果这是一次性练习,您可以按顺序使用多个语句:如下所示:

insert into new_table
select distinct s_id, 0,0,0
from old_table

然后是一系列的更新

update new_table n
set english = (select english from old_table where s_id = n.s_id )
where s_id = n.s_id

【讨论】:

以上是关于MS access 2010 SQL查询帮助的主要内容,如果未能解决你的问题,请参考以下文章

MS Access 2010 - 使用 RIGHT JOIN 的 SQL 查询 - 返回太多值

MS Access 2007 SQL 查询出现问题

SQL 查询和 MS Access 查询返回不同的数据

日期转换错误——MS Access前端查询sql后端

在 MS Access 中管理和调试 SQL 查询

在 MS Access 中回滚多个 SQL 更新查询