黑马程序员技术交流社区

标题: SQL 查询问题 [打印本页]

作者: 吴春晟    时间: 2011-11-12 15:38
标题: SQL 查询问题
在 【传智播客.Net培训—SQL】10流控函数.avi  中最后面 有一道习题 如下:

有一张表:

SDate                     Name        Score
2008-08-08        拜仁        胜
2008-08-09        奇才        胜
2008-08-09        湖人        胜
2008-08-10        拜仁        负
2008-08-08        拜仁        负
2008-08-12        奇才        胜

要求输出如下:

Name        胜        负
拜仁        1        2
湖人        1        0
奇才        2        0

我是通过先建立VIEW 再从VIEW中进行查询
  1. create view view_win as
  2. select name,count(*) as '胜',0 as '负' from T_Scores where Score=N'胜' group by Name;
  3. create view view_fail as
  4. select name,0 as '胜',count(*) as '负' from T_Scores where Score=N'负' group by Name;

  5. select view_win.Name,view_win.胜,isnull(view_fail.负,0)as '负' from view_win left join view_fail on view_win.Name=view_fail.Name
复制代码
但是感觉太过复杂,看视频里老师的讲法,应该是有更方便的实现,那应该如何进行查询??
作者: 吴春晟    时间: 2011-11-12 16:20
找到一个方法:
  1. select T_Scores.Name,

  2. count(
  3. (
  4. case T_Scores.Score
  5. when '胜' then '胜'
  6. when '负' then null
  7. end))as '胜',

  8. count(
  9. (
  10. case T_Scores.Score
  11. when '胜' then null
  12. when '负' then '负'
  13. end))as '负'
  14. from T_Scores group by T_Scores.Name
复制代码
看下还有没有更好的?


作者: 小石    时间: 2011-11-12 17:47
我看了 视频里老师说了一个方法的 是这样的:
select Name,
sum(case Score
when N'胜' then 1
else 0
end
)as 胜,
sum(case Score
when N'负' then 1
else 0
end
)as 负
from T_Scores
group by Name

作者: 朱陈伟    时间: 2011-11-16 00:20
有一张表T_Scores,记录比赛成绩。
   Date       Name    Score
  2008-8-9    湖人    胜
  2008-8-9    湖人    负
  2008-8-10   热血    胜
  2008-8-9    奇才    负
  2008-8-11   热血    胜
要求输出下面的格式。
  Name 胜  负
  湖人 1   1
  热血 2   0
  奇才 0   1
数据和参考答案见备注,注意:在中文字符串前加N,比如N'胜';
正确答案<>:
select Name,
sum{
case Score
when N'胜' then 1
else 0
end
}as 胜,
sum{
case Score
when N'负' then 1
else 0
end
}as 负
from T_Scores
group by Name;




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