我知道有很多了例子了,这里就不麻烦各位写代码了,帮我解释一下代码吧!例如下列代码:
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
group by 姓名
在这段代码中我想知道“case 课程 when '语文' then 分数 else 0 end”是实现的什么功能?
我也看到过其他类似的代码,有的不是用的max函数,有的是用的count函数,这里的函数应该怎么用?
declare @sql varchar(8000)
set @sql = 'select 姓名 '
select @sql = @sql + ' , max(case 课程 when ''' + 课程 + ''' then 分数 else 0 end) [' + 课程 + ']'
from (select distinct 课程 from tb) as a
set @sql = @sql + ' from tb group by 姓名'
exec(@sql) 
这段代码我也看不明白
那个先说了,问的问题很白痴,但是,我怎么看也看不明白,劳烦大家给我这个小白解释一下吧!

解决方案 »

  1.   

    自己去看看联机吧,casewhen 
      

  2.   

    print(@sql) 看代码.
    用max,是对字符串,或一个值的分组取值.
    用count(1),是求记录总数.
    用sum,是对数值型数据(int,decimal...)求和.
      

  3.   

    其实楼主只要明白case when 的用法就知道了
      

  4.   

    case 课程 when '语文' then 分数 else 0 end
    case when是通过表达式来得到结果,那么,这条语句是通过那个条件来得到结果的?
      

  5.   

    max有时候是为了聚合 
    因为后面有group by
    不用max就必须把前面的句子在group by 后面列举出来
      

  6.   

    对,我有时候也会遇到这样的问题,我想把一些字段列出来,可是后面用的group by,就老是报错,非要用聚合函数,我又不知道用什么,呵呵,现在知道了,真是意外收获啊,哈哈~!好了,问题差不多了,结贴吧~ 谢谢各位了!
      

  7.   

    --1 首先你要明白你是想汇总,那就是多条变一条,这个时候你势必要分组,你以姓名分组,那就GROUP BY 姓名--2 然后你想你要的结果列,列名有语文 数学等 那你的每列对应你的每个姓名只要一个值,但是当你用
        case 课程 when '语文' then 分数 else 0 end 的时候 会出现很多个记录 其中只有一个是你对应
        姓名的分数 其他都是0 所以你要将你的那个真正的分数取出来给语文列名 这个时候需要使用MAX函数来 获取 所以使用MAX(case 课程 when '语文' then 分数 else 0 end )