A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 吴春晟 黑马帝   /  2011-11-12 15:38  /  2864 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在 【传智播客.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
复制代码
但是感觉太过复杂,看视频里老师的讲法,应该是有更方便的实现,那应该如何进行查询??

评分

参与人数 1技术分 +1 收起 理由
陈涛 + 1

查看全部评分

3 个回复

正序浏览
有一张表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;

评分

参与人数 1技术分 +1 收起 理由
陈涛 + 1

查看全部评分

回复 使用道具 举报
小石 黑马帝 2011-11-12 17:47:12
藤椅
我看了 视频里老师说了一个方法的 是这样的:
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-12 22:32

评分

参与人数 1技术分 +1 收起 理由
陈涛 + 1

查看全部评分

回复 使用道具 举报
找到一个方法:
  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
复制代码
看下还有没有更好的?

评分

参与人数 1技术分 +1 收起 理由
陈涛 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马