SQL将列数据转换为总计网格

时间:2013-09-20 09:30:30

标签: sql join transpose

我有两列数据来自不同的表:

KS2    Result
4a     C
4a     C
3c     C+
3c     C-
5a     B
5a     B
5a     B
5a     C+

我想将此转换为总计网格,例如:

      C-    C    C+    B
3c    1     -    1     -
4a    -     2    -     -
5a    -     -    1     3

( - 表示NULL)

我用来填充列的SQL是:

select ks2en, result 
    from student 
        join subject on subject.upn=student.upn 
            where name='English'

是否有一种有效的方法可以使用类似群组的方式?

1 个答案:

答案 0 :(得分:1)

您可以按ks2en列进行分组,并使用CASE分别计算结果。

select ks2en, 
       count(case result when 'C-' then 1 end),
       count(case result when 'C' then 1 end),
       count(case result when 'C+' then 1 end),
       count(case result when 'B' then 1 end),
  from student join subject 
    on subject.upn=student.upn 
 where name='English'
 group by ks2en;

输出:

ks2en   C-    C    C+    B
--------------------------
3c      1     0    1     0
4a      0     2    0     0
5a      0     0    1     3

请注意,如果没有适用的成绩,这将给你0而不是null。