我知道有很多了例子了,这里就不麻烦各位写代码了,帮我解释一下代码吧!例如下列代码:
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)
这段代码我也看不明白
那个先说了,问的问题很白痴,但是,我怎么看也看不明白,劳烦大家给我这个小白解释一下吧!
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)
这段代码我也看不明白
那个先说了,问的问题很白痴,但是,我怎么看也看不明白,劳烦大家给我这个小白解释一下吧!
用max,是对字符串,或一个值的分组取值.
用count(1),是求记录总数.
用sum,是对数值型数据(int,decimal...)求和.
case when是通过表达式来得到结果,那么,这条语句是通过那个条件来得到结果的?
因为后面有group by
不用max就必须把前面的句子在group by 后面列举出来
case 课程 when '语文' then 分数 else 0 end 的时候 会出现很多个记录 其中只有一个是你对应
姓名的分数 其他都是0 所以你要将你的那个真正的分数取出来给语文列名 这个时候需要使用MAX函数来 获取 所以使用MAX(case 课程 when '语文' then 分数 else 0 end )