sql Как скрыть строку, если значение всей строки равно 0 - PullRequest
0 голосов
/ 22 апреля 2020

Мой запрос:

SELECT 
    (ref_intake.intakeno) AS intake,
    SUM(CASE WHEN(student.intakeid AND student.status = '3' AND (student.courseid=3 OR student.courseid=17)) THEN 1 else 0 END) as active,
    SUM(CASE WHEN(student.intakeid AND student.status = '5' AND (student.courseid=3 OR student.courseid=17)) THEN 1 else 0 END) as deffered,
    SUM(CASE WHEN(student.intakeid AND student.status = '16' AND (student.courseid=3 OR student.courseid=17)) THEN 1 else 0 END) as inactive,
    SUM(CASE WHEN(student.intakeid AND student.status = '9' AND (student.courseid=3 OR student.courseid=17)) THEN 1 else 0 END) as missing,
    SUM(CASE WHEN(student.intakeid AND student.status = '6' AND (student.courseid=3 OR student.courseid=17)) THEN 1 else 0 END) as widthdrawn,
    SUM(CASE WHEN(student.intakeid AND student.status IN (18,7,36) AND (student.courseid=3 OR student.courseid=17)) THEN 1 else 0 END) as dis_ter_dereg
FROM student 
LEFT JOIN ref_intake ON student.intakeid = ref_intake.intakeid
GROUP BY student.intakeid ORDER BY ref_intake.intakeno ASC

Изображение - мой результат:

reslut

1 Ответ

0 голосов
/ 22 апреля 2020

Я подозреваю, что ваш запрос может быть упрощен следующим образом:

SELECT 
    s.intakeid AS intake,
    SUM(CASE WHEN s.status = 3  THEN 1 ELSE 0 END) as active,
    SUM(CASE WHEN s.status = 5  THEN 1 ELSE 0 END) as deffered,
    SUM(CASE WHEN s.status = 16 THEN 1 ELSE 0 END) as inactive,
    SUM(CASE WHEN s.status = 9  THEN 1 ELSE 0 END) as missing,
    SUM(CASE WHEN s.status = 6  THEN 1 ELSE 0 END) as widthdrawn,
    SUM(CASE WHEN s.status IN (18, 7, 36) THEN 1 ELSE 0 END) as dis_ter_dereg
FROM student s
INNER JOIN ref_intake ri ON  s.intakeid = ri.intakeid
WHERE
    s.intakeid 
    AND s.status IN (3, 5, 16, 9, 6, 18, 7, 36)
    AND s.courseid IN (3, 17)
GROUP BY s.intakeid 
ORDER BY ri.intakeno ASC

То есть:

  • большинство условий можно перенести в предложение WHERE - это должно фактически удалить строки, в которых не найдено ни одного условия

  • кажется, что вы действительно хотите INNER JOIN, а не LEFT JOIN - но вы можете отменить это изменение при необходимости

  • псевдонимы таблиц облегчают чтение и запись запроса

  • OR редактируемые условия могут быть упрощены для использования IN

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...