SQL, объединяющий несколько результатов SELECT

У меня есть три оператора 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 ответа

Решение

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

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

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

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

Другие вопросы по тегам