У меня есть одна таблица услуг. Мне нужно объединить два запроса SELECT. У обоих разные пункты where. Например
SELECT
U_REGN as 'Region',
COUNT(callID) as 'OpenServices',
SUM(CASE WHEN descrption LIKE '%DFC%' THEN 1 ELSE 0 END) 'DFC'
FROM OSCL
WHERE
([status] = - 3)
GROUP BY
U_REGN
ORDER BY
'OpenServices' desc
Это дает мне результат
Region | OpenServices | DFC
Karaci | 14 | 4
Lahore | 13 | 3
Islamabad | 10 | 4
У меня есть другой запрос
SELECT
U_REGN as 'Region',
COUNT(callID) as 'ClosedYesterday'
FROM OSCL
WHERE
DATEDIFF(day, closeDate, GETDATE()) = 1
GROUP BY
U_REGN
ORDER BY
'ClosedYesterday' desc
Это дает мне результат
Region | ClosedServices
Karachi | 8
Lahore | 7
Islamabad | 4
Мне нужно объединить оба результата и показать ClosedServices рядом со столбцом DFC.
sql-server
TheSarfaraz
источник
источник
Ответы:
Рассматривайте результаты двух ваших текущих запросов как таблицы и объединяйте их:
Не самый красивый кусочек SQL, который я когда-либо писал, но, надеюсь, вы увидите, как он работает, и поймете, как его поддерживать.
Я подозреваю, что более эффективный запрос будет синглом
SELECT
из OSCL, сгруппированным по U_REGN, с каждым из трех ваших счетчиков в качестве отдельныхSUM(CASE ...)
операторов, похожих на то, что вы делаете в настоящее время для DFC. В большинстве случаев это будет сканирование одной таблицы, в зависимости от ваших индексов и схемы.источник
Основываясь на предложении Майкла:
источник