有两个表A和B表A:考试结果表 准考证号 科目 成绩
0001 语文 88
0001 数学 77
0001 英文 68
0002 语文 74
0002 数学 61
0002 英文 60
表B:考生表(准考证号唯一)
准考证号 姓名 成绩是否审核 0001 李红 0
0002 刘刚 1我要查询的结果是:
准考证号 姓名 语文 数学 英文 成绩是否审核
0001 李红 88 77 68 0
0002 刘刚 74 61 60 1
帮忙写出SQL语句
0001 语文 88
0001 数学 77
0001 英文 68
0002 语文 74
0002 数学 61
0002 英文 60
表B:考生表(准考证号唯一)
准考证号 姓名 成绩是否审核 0001 李红 0
0002 刘刚 1我要查询的结果是:
准考证号 姓名 语文 数学 英文 成绩是否审核
0001 李红 88 77 68 0
0002 刘刚 74 61 60 1
帮忙写出SQL语句
,sum(case when b.科目='语文' then b.成绩 else 0 end) as 语文
,sum(case when b.科目='数学' then b.成绩 else 0 end) as 数学
,sum(case when b.科目='英文' then b.成绩 else 0 end) as 英文
,a.成绩是否审核
from 考试结果表 b ,考生表 a
where a.准考证号= b.准考证号
group by a.准考证号, a.姓名,a.成绩是否审核
n.姓名,
max(case m.科目 when '语文' then m.成绩 else 0 end) 语文,
max(case m.科目 when '数学' then m.成绩 else 0 end) 数学,
max(case m.科目 when '英文' then m.成绩 else 0 end) 英文,
n.成绩是否审核
from 考试结果表 m, 考生表 n
where m.准考证号 = n.准考证号
group by m.准考证号,n.姓名,n.成绩是否审核
-- Author: T.O.P
-- Create date: 2009/11/28
-- Version: SQL SERVER 2005
-- =============================================
declare @TB1 table([准考证号] varchar(4),[科目] varchar(4),[成绩] int)
insert @TB1
select '0001','语文',88 union all
select '0001','数学',77 union all
select '0001','英文',68 union all
select '0002','语文',74 union all
select '0002','数学',61 union all
select '0002','英文',60declare @TB2 table([准考证号] varchar(4),[姓名] varchar(4),[成绩是否审核] int)
insert @TB2
select '0001','李红',0 union all
select '0002','刘刚',1SELECT A.[准考证号], A.[姓名],
MAX(CASE WHEN [科目]='语文' THEN [成绩] ELSE 0 END) AS 语文,
MAX(CASE WHEN [科目]='数学' THEN [成绩] ELSE 0 END) AS 数学,
MAX(CASE WHEN [科目]='英文' THEN [成绩] ELSE 0 END) AS 英文
,A.[成绩是否审核]
FROM @TB2 A INNER JOIN @TB1 B ON A.[准考证号] = B.[准考证号]
GROUP BY A.[准考证号], A.[姓名],A.[成绩是否审核]
--测试结果:
/*
准考证号 姓名 语文 数学 英文 成绩是否审核
---- ---- ----------- ----------- ----------- -----------
0001 李红 88 77 68 0
0002 刘刚 74 61 60 1(2 row(s) affected)
*/
'MAX' 附近有语法错误。关键字 'GROUP' 附近有语法错误。