SQL:生成矩阵以显示不同值组合的计数

时间:2016-01-12 13:27:10

标签: sql oracle

是否有生成矩阵的解决方案,例如下面SQL中提出的矩阵?

下表显示了100名参加Cat研究课程的学生,其中52人参加了狗研究和猫研究,但只有3人参加了猫研究和沙鼠研究。等等。

Modules         Cat Studies  Dog Studies  Gerbil Studies
Cat Studies       100             52            3
Dog Studies       52              75            45
Gerbil Studies    3               45            60

输入数据为

module             personCode
Cat Studies        1345
Cat Studies        1234
Gerbil Studies     5634
Dog Studies        9878
Gerbil Studies     5643
Dog Studies        7362

这个源数据库是Oracle,但我们在SQL服务器上有一个数据仓库,我们可以加载它。

1 个答案:

答案 0 :(得分:1)

使用JOIN自我GROUP BY并使用CASE表达式进行条件计数:

select t1.module,
       sum(case when t2.module = 'Cat Studies' then 1 end) as "Cat Studies",
       sum(case when t2.module = 'Dog Studies' then 1 end) as "Dog Studies",
       sum(case when t2.module = 'Gerbil Studies' then 1 end) as "Gerbil Studies"
from tablename t1
  join tablename t2 on t1.personCode = t2.personCode
group by t1.module