请问下面的SQL进行行列转换时,为什么需要max聚合?

streamlong 发布于 2012/05/18 15:54
阅读 667
收藏 0
SQL

已知表test(主键ID,姓名,课程,分数,阶段测评),查询结果如下:

id   name     kc       fs      jdcp

1    张三    语文    81    单元测评一
2    张三    数学    90    单元测评一
3    李四    语文    100   单元测评一
4    李四    数学    75    单元测评一
5    张三    语文    68    单元测评二
6    张三    数学    72    单元测评二
7    李四    语文    80    单元测评二
8    李四    数学    90    单元测评二
9    王五    语文    99    单元测评一
10    王五    数学    60    单元测评一
11    王五    语文    98    单元测评二
12    王五    数学    70    单元测评二

我想获得的结果是:

姓名  语文  数学   阶段测评

张三  81     90      阶段测评一

李四  100    75     阶段测评一

王五   99    60    阶段测评一

张三   68    72     阶段测评二

依次类推。。。。。。

如下SQL可以解决以上问题:

select name, jd,
max(case when kc ='语文' then fs else 0 end) as yw,
max(case when kc ='数学' then fs else 0 end) as sx
from test group by name, jd;

但是我不知道为什么要加max?

以下是问题补充:

@streamlong:如果数据中,有负数,那么使用max函数来统计时,会将负数的值会显示为0,如果使用min函数来统计,则会将正数的值显示为0;请问此时为什么要使用聚合函数,有什么办法可以同时兼容这种情况? (2012/05/18 16:15)
加载中
0
streamlong
streamlong
解决了:把else 0 去掉,就可以了,但同时也会带来这个问题,就是如果该字段没有值的话,默认为null,界面是空白,这个需要自己手动处理下咯, Happy Up
返回顶部
顶部