последний раз, когда вы научили меня поворачивать, используя SELECT CASE, и это было очень полезно. На этот раз мне нужна помощь в чем-то более продвинутом.Вложенный поворот
ситуация выглядит следующим образом:
Я имею ту же самую старую базу данных смерти записи; столбец хранения причин содержит значение для всех причин, и я сделал, чтобы превратить его в п столбцы для п причин использования выберите случай, как этот
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 |
| ... | ... | ... | ... | ... | ... | ... |
Вместо этого, мой профессор сказал, что было бы желательно, если бы у меня была только одна строка для каждого города, сохраняя в любом случае гендерного различия.
Итак, мне нужно удвоить столбцы, связанные с причинами, например causeI_m и causeI_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 |
| ... | ... | ... | ... | ... | ... | ... | ... |
Я учил, что я упорядочены базы данных, чтобы суммировать случаи, когда секс равно, что модальности и причиной является один Я указано. Но что-то не так, и я не могу понять, что. Я был бы рад, если бы вы мне немного помогли :) (Я надеюсь, что хорошо объяснил проблему, английский по-прежнему мой второй язык)
Подготовить http://sqlfiddle.com с образцами данных, чтобы воссоздать ваш случай – lad2025