回 帖 发 新 帖 刷新版面

主题:[原创]恳请高手们帮我讲解这个SQL语句,行列转换

1. 行列转换--普通

假设有张学生成绩表(CJ)如下
Name    Subject     Result
张三    语文        80
张三    数学        90
张三    物理        85
李四    语文        85
李四    数学        92
李四    物理        82

想变成    
姓名   语文   数学   物理
张三   80     90     85
李四   85     92     82

declare @sql varchar(4000)
set @sql = 'select Name'
select @sql = @sql + ',sum(case Subject when '''+Subject+''' then Result end) ['+Subject+']'
from (select distinct Subject from CJ) as a
select @sql = @sql+' from CJ group by name'
exec(@sql)
问题:
[color=FF00FF]select @sql = @sql + ',sum(case Subject when '''+Subject+''' then Result [/color]这行甚么意思啊?select里面又有select??
高手们能一行一行教我吗?

回复列表 (共2个回复)

沙发

select @sql = @sql + ',sum(case Subject when '''+Subject+''' then Result end) ['+Subject+']'
from (select distinct Subject from CJ) as a

这些语句是核心,  sum  函数在里面没有太大用只是这条语句后面有 group by  所以要用到
case Subject when '''+Subject+''' then Result end

case 完整写法是  case 变量  when 值 then 值 else 值 end

就是说,判断  Subject 这个字段 如果等于它本身则用 Result代替 
在那里的意思就是把Subject列(以行作单元) 对应的Result的值取出来,作用查询的结果 
['+Subject+']'  就是别名了!
那个case 为什么没有else 是因为那个条件是永远成立的

from (select distinct Subject from CJ) as a
这句话的意思是,除去重复行,返回一个临时查询记录集,as a 是必须的
核心就在这里了!这个人真是个高手,思想不是我现阶段能比的!

板凳

非常感谢233238447

我来回复

您尚未登录,请登录后再回复。点此登录或注册