日期:2014-05-17  浏览次数:20614 次

普通的行列转化,为什么要这样写呢,脑子转不过来了啊

表:
看着都是这么写的:
select sc.Sid,
max(CASE sc.Cid WHEN '01' THEN sc.score ELSE 0 END) '01',
max(CASE sc.Cid WHEN '02' THEN sc.score ELSE 0 END) '02',
max(CASE sc.Cid WHEN '03' THEN sc.score ELSE 0 END) '03'
 from sc
GROUP BY sc.Sid

然后结果就是
max不是求最大值的么?和case when放在一起用为什么会这样的?不知道有没有详细一点的解释

------解决方案--------------------
这个查询不是有case when的条件么,没有MAX及GROUP BY查询后的数据类似

sid   01  02  03
01    80  0   0
01    0   90  0
01    0   0   99

这样子可以看明白不,就是把 01 02 03 这几个做成列即字段了,然后把对应的值写到里面,加MAX查询后会变为行数据。
------解决方案--------------------
http://blog.csdn.net/gongjian0628/article/details/7869375   看看这个 例子也许对你有帮助
------解决方案--------------------
引用:
表:
看着都是这么写的:SQL code?123456select sc.Sid,max(CASE sc.Cid WHEN '01' THEN sc.score ELSE 0 END) '01',max(CASE sc.Cid WHEN '02' THEN sc.score ELSE 0 END) '02',max(CASE sc.Cid WHEN '03' THEN sc.score ELSE……
你的写法没问题啊?你想问什么?数据的结果不是你想要的?min在你这个例子里面不行,如果把max单纯替换为min,那么出来的结果全是0.0。用max的时候,因为case when做了判断,如果不符合条件就硬性赋值0,而你那里有数据的都比0大,所以就取到那些数据。
------解决方案--------------------
针对lz的测试数据来说,max,sum得到的结果是一样的。