SQL SELECT с использованием оператора CASE, но несколько критериев - PullRequest
3 голосов
/ 31 марта 2011

Я пытаюсь выполнить запрос 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.Сложность состоит в том, что требование может иметь несколько задач каждого типа, но, например, требование должно быть завершено, только если все его задачи выполнены, в противном случае оно не завершено.

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

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

1 Ответ

2 голосов
/ 31 марта 2011

Вам необходимо сравнить сумму с полным номером:

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  

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

...