SQL, объединяющий несколько результатов SELECT - PullRequest
4 голосов
/ 09 мая 2009

У меня есть три оператора SELECT, каждый из которых возвращает общее количество: «Новые случаи», «Закрытые случаи», «Существующие случаи». Как мне объединить их, чтобы они возвращались в одном наборе результатов.

т.е. мне нужна таблица, возвращаемая с 3 полями: «Новые случаи», «Закрытые дела» и «Существующие дела», каждое из которых содержит по одному

SELECT     COUNT(CaseID) AS 'New Cases'
FROM         dbo.ClientCase
WHERE     (CaseStartDate >= CONVERT(DATETIME, '2009-01-01 00:00:00', 102))
  AND     (CaseStartDate <= CONVERT(DATETIME, '2009-03-31 00:00:00', 102))

SELECT     COUNT(CaseID) AS 'Closed Cases'
FROM         dbo.ClientCase
WHERE     (CaseClosedDate >= CONVERT(DATETIME, '2009-01-01 00:00:00', 102))
  AND     (CaseClosedDate <= CONVERT(DATETIME, '2009-03-31 00:00:00', 102))

SELECT     COUNT(CaseID) AS 'Existing Cases'
FROM         dbo.ClientCase
WHERE     (CaseStartDate <= CONVERT(DATETIME, '2009-03-31 00:00:00', 102))

Ответы [ 2 ]

13 голосов
/ 09 мая 2009

Поскольку вы рассчитываете одни и те же данные, вы можете делать это параллельно:

select
   sum(case when CaseStartDate between '2009-01-01' and '2009-03-31' then 1 else 0 end) as [New Cases],
   sum(case when CaseClosedDate between '2009-01-01' and '2009-03-31' then 1 else 0 end) as [Closed Cases],
   sum(case when CaseStartDate <= '2009-03-31' then 1 else 0 end) as [Existing Cases]
from
   dbo.ClientCase
0 голосов
/ 09 мая 2009

@ Mitch, @Guffa .. Хорошее решение, но для того, чтобы получить правильный результат, вам нужно принять во внимание оба поля CaseStartDate и CaseClosedDate. Например. в новых случаях, если вы не отфильтруете данные CaseClosedDate, вы не получите правильное «нет». NewCases, так как он будет учитываться и в закрытых случаях.

Извините, я должен опубликовать это как ответ, потому что у меня нет репутации enuf, чтобы добавить комментарий.

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