请大家帮忙了 实现查询出的效果的代码
表名为StudentScore,name列,subject列,score列
张三 语文 50
张三 数学 80
张三 英语 60
李四 语文 65
李四 英语 50
王五 数学 85
王五 英语 30
老六 语文 66
老六 数学 55
老六 英语 88
查询出来的结果为:
姓名 语文 数学 英语
张三 50 80 60
李四 65 缺考 50
王五 缺考 85 30
老六 66 55 88
谢谢大家了 这个查询语句怎么写~
TX莫名其妙,说我的回答已被之前网友使用,不给我发代码上来。害我只能截图
select distinct name as 姓名,语文 = (case subject when '语文' then score else '缺考' end),
数学 = (case subject when '数学 then score else '缺考' end),
英语 = (case subject when '英语' then score else '缺考' end)
来个好玩的
sqlserver2005或以上支持 oracle好像也有类似语法
create table #StudentScore (name nvarchar(10),[subject] nvarchar(10),score int)
insert #StudentScore select '张三', '语文', 50
insert #StudentScore select '张三', '数学', 80
insert #StudentScore select '张三', '英语', 60
insert #StudentScore select '李四', '语文', 65
insert #StudentScore select '李四', '英语', 50
insert #StudentScore select '王五', '数学', 85
insert #StudentScore select '王五', '英语', 30
insert #StudentScore select '老六', '语文', 66
insert #StudentScore select '老六', '数学', 55
insert #StudentScore select '老六', '英语', 88
select name,
isnull(cast(语文 as nvarchar),'缺考') as "语文",
isnull(cast(数学 as nvarchar),'缺考') as "数学",
isnull(cast(英语 as nvarchar),'缺考') as "英语"
from
#StudentScore
pivot
(
sum(score)
for [subject] in
([语文],[数学],英语)
)
as pvt
drop table #StudentScore
select distinct([Name]),语文=isnull((select score from StudentScore where subject='语文' and [Name]=t.[Name]),'缺考'),数学=isnull((select score from StudentScore where subject='语文' and [Name]=t.[Name]),'缺考'),英语=isnull((select score from StudentScore where subject='英语' and [Name]=t.[Name]),'缺考') from StudentScore as t
前提条件 保证子查询中 只有一条记录
表中不能有 类似
张三 语文 50
张三 语文 60
这样的情况出现
如果有这种情况
子查询中必须加入条件
也许两个成绩是 张三两个学期的考试成绩
大概这样 抛砖 引玉
用分组实现:
select name,subject,score from StudentScore group by(name);
SELECt name,subject,score
FROM StudentScore
where name="张三" or name="李四" or name="王五" or name="老六"
select name as'姓名'
,(select score from StudentScore as s where s.name=t.name and subject='语文' ) as '语文'
,(select score from StudentScore as s where s.name=t.name and subject='数学' ) as '数学'
,(select score from StudentScore as s where s.name=t.name and subject='英语' ) as '英语'
from StudentScore as t