【发布时间】:2016-03-19 15:00:34
【问题描述】:
上次你教我使用 SELECT CASE 进行旋转,它非常有帮助。 这次我需要一些更高级的帮助。
情况如下:
我有相同的旧死亡记录数据库;存储原因的列包含所有原因的值,我使用选择案例将其转换为 n 个原因的 n 列,如下所示
SELECT anno, cod_comune,
SUM(CASE sex WHEN 'M' THEN 1 ELSE 0 END) AS M,
SUM(CASE sex WHEN 'F' THEN 1 ELSE 0 END) AS F,
SUM(CASE cod_tit WHEN 'I' THEN 1 ELSE 0 END) AS dis_I,
SUM(CASE cod_tit WHEN 'II' THEN 1 ELSE 0 END) AS dis_II ,
SUM(CASE cod_tit WHEN 'III' THEN 1 ELSE 0 END) AS dis_III,
...
FROM casi
WHERE cod_comune>40000 AND cod_comune<200000 AND cod_comune NOT LIKE '%00'
GROUP BY anno, cod_comune, sex
ORDER BY anno, cod_comune, age;
通过这样做,我获得了每个城市的 2 行,男性一行,女性一行,以及每种原因导致的死亡人数。
也就是说,我得到了这样的东西
+------+------------+------+------+-------+--------+---------+
| anno | cod_comune | M | F | dis_I | dis_II | dis_III |
+------+------------+------+------+-------+--------+---------+
| 2003 | 41001 | 0 | 19 | 0 | 5 | 0 |
| 2003 | 41001 | 20 | 0 | 0 | 7 | 0 |
| 2003 | 41002 | 12 | 0 | 0 | 3 | 0 |
| 2003 | 41002 | 0 | 16 | 0 | 6 | 0 |
| 2003 | 41003 | 8 | 0 | 0 | 1 | 0 |
| 2003 | 41003 | 0 | 6 | 0 | 2 | 0 |
| ... | ... | ... | ... | ... | ... | ... |
相反,我的教授说,如果我每个城镇只有 1 行,保持性别差异,那将是可取的。
因此,我将与原因相关的列加倍,例如原因I_m 和原因I_f。我给出了两个条件来选择大小写,但它不起作用,其中的原因是我全为零。
SELECT anno, cod_comune,
SUM(CASE sex WHEN 'M' THEN 1 ELSE 0 END) AS M,
SUM(CASE sex WHEN 'F' THEN 1 ELSE 0 END) AS F,
SUM(CASE sex WHEN 'M' AND cod_tit='I' THEN 1 ELSE 0 END) AS dis_Im,
SUM(CASE sex WHEN 'M' AND cod_tit='II' THEN 1 ELSE 0 END) AS dis_IIm ,
SUM(CASE sex WHEN 'M' AND cod_tit='III' THEN 1 ELSE 0 END) AS dis_IIIm,
...
SUM(CASE sex WHEN 'F' AND cod_tit='I' THEN 1 ELSE 0 END) AS dis_If,
SUM(CASE sex WHEN 'F' AND cod_tit='II' THEN 1 ELSE 0 END) AS dis_IIf ,
SUM(CASE sex WHEN 'F' AND cod_tit='III' THEN 1 ELSE 0 END) AS dis_IIIf,
...
FROM casi
WHERE cod_comune>40000 AND cod_comune<200000 AND cod_comune NOT LIKE '%00'
GROUP BY anno, cod_comune, sex
ORDER BY anno, cod_comune, age;
我从这个查询中得到
+------+------------+------+------+--------+---------+--------+---------+
| anno | cod_comune | M | F | dis_Im | dis_IIm | dis_If | dis_IIf |
+------+------------+------+------+--------+---------+--------+---------+
| 2003 | 41001 | 20 | 19 | 0 | 0 | 0 | 0 |
| 2003 | 41002 | 12 | 16 | 0 | 0 | 0 | 0 |
| 2003 | 41003 | 8 | 6 | 0 | 0 | 0 | 0 |
| 2003 | 41004 | 7 | 5 | 0 | 0 | 0 | 0 |
| 2003 | 41005 | 2 | 5 | 0 | 0 | 0 | 0 |
| ... | ... | ... | ... | ... | ... | ... | ... |
我已经命令数据库对性等于该模态的情况进行汇总,并且原因是我指定的原因。但是出了点问题,我不知道是什么。 如果你能给我一点帮助,我会很高兴 :) (我希望能很好地解释问题,英语仍然是我的第二语言)
【问题讨论】:
-
用示例数据准备sqlfiddle.com 以重新创建您的案例