普通的行列转化,为什么要这样写呢,脑子转不过来了啊
表:
看着都是这么写的:
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得到的结果是一样的。