找回密码
 注册
搜索
热搜: java php web
查看: 1080|回复: 4

请教一个SQL语句写法

[复制链接]
发表于 2009-1-26 11:50:36 | 显示全部楼层 |阅读模式
比如一个表结构如下:

姓名     科目    成绩
学生A    语文    100
学生A    数学    80
学生B    语文    70
学生C    英语    90
学生A    化学    60
学生A    政治    90
........

我现在想把所有学生A的科目和成绩汇出来,格式大致如下:

姓名  语文成绩  数学成绩  化学成绩  政治成绩
学生A   100       80        60       90    ......

有个前提 我不知道这个学生A究竟有哪些科的成绩 可能只有一科 ,或者有5,6科 甚至也可能一科没有
这条语句要怎么写,单纯用SQL语句实现

谢谢大家
发表于 2009-1-26 12:37:10 | 显示全部楼层
select a.name"姓名", a.grade"语文",b.grade"数学",c.grade"英语" from
stu_grade a,stu_grade b,stu_grade c
where a.name = b.name and b.name = c.name
and a.class ='语文' and b.class ='数学' and c.class ='英语'
回复

使用道具 举报

 楼主| 发表于 2009-1-26 13:09:12 | 显示全部楼层
典型的行转列问题


select name 姓名,
max(yw) 语文,
max(sx) 数学,
max(yy) 英语,
max(wl) 物理,
max(hx) 化学,
max(ls) 历史
from (
        select sname ,(case when cname='语文' then score  end) yw,
(case when cname='数学' then score end) sx,
(case when cname='英语' then score  end) yy,
(case when cname='物理' then score  end) wl,
(case when cname='化学' then score  end) hx,
(case when cname='历史' then score  end) ls
    from t left join s on t.sno=s.sno left join c on t.cno=c.cno
  ) tmp
回复

使用道具 举报

发表于 2009-1-26 13:30:45 | 显示全部楼层
为查看自己的ID来一下。。。
回复

使用道具 举报

 楼主| 发表于 2009-1-26 12:58:26 | 显示全部楼层
可是有二种方法
这是动态sql:
declare @sql varchar(8000)
set @sql='select names'
select @sql=@sql+',max(case when type='''+type+''' then type end) [type'+type+']'
                +',max(case when type='''+type+''' then flag end) [flag'+type+']'
from tb group by type

exec (@sql+' from tb group by names')
还有就直接写:
select 姓名 as 姓名 ,
  max(case 课程 when '语文' then 分数 else 0 end) 语文,
  max(case 课程 when '数学' then 分数 else 0 end) 数学,
  max(case 课程 when '物理' then 分数 else 0 end) 物理
from tb
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|软晨网(RuanChen.com)

GMT+8, 2024-11-23 05:16

Powered by Discuz! X3.5

Copyright © 2001-2023 Tencent Cloud.

快速回复 返回顶部 返回列表