黑马程序员技术交流社区

标题: 关于数据库查询的一道题 [打印本页]

作者: 做只会飞的鱼    时间: 2013-10-15 00:49
标题: 关于数据库查询的一道题
本帖最后由 做只会飞的鱼 于 2013-10-15 19:43 编辑

有一张表s_sco,结构如下:
   姓名   科目   分数  
   张三   语文    90
   张三   数学    85
   张三   英语    80
   李四   语文    88
   李四   数学    80
   李四   英语    93
  怎样用select语句把上表显示成如下结构
   姓名  语文   数学   英语
   张三   90      85     80
   李四   88      80     93
作者: bird_not_fat    时间: 2013-10-15 08:56
亲,我做了1小时终于整出来了。。。
  1. select name as '姓名',sum(case subject when 'yuwen' then score else 0 end) as '语文',
  2. sum(case subject when 'shuxue' then score else 0 end) as '数学',
  3. sum(case subject when 'yingyu' then score else 0 end) as '英语' from tbl_student group by name;
复制代码
一定用case语句才有用...
我的表结构是
name varhcar(20),subject varcahr(20),score number(5).
你试试这样行不,我这行。。。

作者: To    时间: 2013-10-15 18:06
楼主你好,如果问题已解决请将帖子状态修改为提问结束,如果未解决请继续提问,谢谢合作
如果不会修改请看解释帖:http://bbs.itheima.com/thread-89313-1-1.html
作者: 做只会飞的鱼    时间: 2013-10-15 19:44
bird_not_fat 发表于 2013-10-15 08:56
亲,我做了1小时终于整出来了。。。一定用case语句才有用...
我的表结构是
name varhcar(20),subject varca ...

谢谢哈~我一直是以多表联合查询的思维去想的.完全错了
作者: ☆╰學不会☆╮    时间: 2013-10-15 20:40
虽然楼上有答案了 但是还是想把自己的思路分享出来。
使用case when  then语句
select  name as 姓名
max(case kemu  when '语文' then chengji else 0 end ) as 语文,
max(case kemu  when '数学' then chengji else 0 end ) as 数学,
max(case kemu  when '英语' then chengji else 0 end ) as 英语,
from  表名
group by name
else 的意思是 如果成绩没有 则显示为0分 如果不写else 则显示null
最后要以姓名字段进行分组
以上代码 自己可以sql server中建个表格 试一试 加深印象。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2