Я пытаюсь выполнить запрос SQL SELECT, используя оператор CASE, который работает на 100%. Мой код выглядит следующим образом:

SELECT t.TASK_WINDOW, 
   SUM(CASE WHEN t.TASK_NAME = 'DEV' AND t.TASK_STATUS = 'Completed' THEN 1 ELSE 0 END) AS DevComplete,
   SUM(CASE WHEN t.TASK_NAME = 'TEST' AND t.TASK_STATUS = 'Completed' THEN 1 ELSE 0 END) AS TestComplete,
   SUM(CASE WHEN t.TASK_NAME = 'RELEASE' AND t.TASK_STATUS = 'Completed' THEN 1 ELSE 0 END) AS ReleaseComplete
FROM Requirements r
    INNER JOIN Tasks t
        ON r.TASK = t.REQ_ID
GROUP BY t.TASK_WINDOW

Однако моя проблема в том, что у меня есть дополнительные критерии для всех трех SUMS. Сложность заключается в том, что требование может иметь несколько задач каждого типа, но, например, требование должно быть завершено только в том случае, если все его задачи разработки выполнены, в противном случае оно является неполным.

Я действительно хочу иметь возможность измерять количество требований со всеми завершенными задачами разработки, а также со всеми завершенными задачами тестирования и всеми задачами выпуска, но сгруппировать их все по последнему окну выполнения задачи разработки.

Пожалуйста помоги ;-)

3
john 31 Мар 2011 в 10:55

1 ответ

Вам нужно сравнить общее количество с полным числом:

SELECT t.TASK_WINDOW,     

CASE
WHEN SUM(CASE WHEN t.TASK_NAME = 'DEV' THEN 1 ELSE 0 END) =
   SUM(CASE WHEN t.TASK_NAME = 'DEV' AND t.TASK_STATUS = 'Completed' THEN 1 ELSE 0 END) 
Then 1 
ELSE 0 
END as AllDevComplete

FROM Requirements r
  INNER JOIN Tasks t
      ON r.TASK = t.REQ_ID
GROUP BY  t.TASK_WINDOW  

В качестве альтернативы вы можете искать номер, который НЕ является полным. Но тот же базовый прием — случай суммы случая — сработает.

2
Ben 31 Мар 2011 в 11:15
Спасибо, похоже, у меня это не работает, так как набор результатов содержит только 1 или 0 для каждого окна задачи.
 – 
john
31 Мар 2011 в 12:38
Я не уверен, что это сработает, поскольку каждая задача имеет свою собственную строку в таблице, поэтому для сравнения общего числа задач разработки с количеством задач разработки, выполненных для каждого требования, необходимо охватывать строки. Любые идеи???
 – 
john
31 Мар 2011 в 13:17
Да, просто сгруппируйте по требованию, а не по задаче.
 – 
Ben
31 Мар 2011 в 19:08