我有一张服务表。我需要合并两个 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
Run Code Online (Sandbox Code Playgroud)
这给了我结果
Region | OpenServices | DFC
Karaci | 14 | 4
Lahore | 13 | 3
Islamabad | 10 | 4
Run Code Online (Sandbox Code Playgroud)
我还有一个疑问
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
Run Code Online (Sandbox Code Playgroud)
它给了我结果
Region | ClosedServices
Karachi | 8
Lahore | 7
Islamabad | 4
Run Code Online (Sandbox Code Playgroud)
我需要合并两个结果,并在 DFC 列旁边显示 ClosedServices。
Mic*_*een 16
将您当前的两个查询的结果集视为表并加入它们:
select
FirstSet.Region,
FirstSet.OpenServices,
FirstSet.DFC,
SecondSet.ClosedYesterday
from
(
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
) as FirstSet
inner join
(
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
) as SecondSet
on FirstSet.Region = SecondSet.Region
order by FirstSet.Region
Run Code Online (Sandbox Code Playgroud)
这不是我写过的最漂亮的 SQL,但希望您能看到它是如何工作的并了解如何维护它。
我怀疑性能更好的查询是SELECT来自 OSCL的单个查询,按 U_REGN 分组,三个计数器中的每一个作为单独的SUM(CASE ...)语句,类似于您目前为 DFC 所做的工作。这最多是单表扫描,具体取决于您的索引和架构。
建立迈克尔的建议:
SELECT
U_REGN AS 'Region',
SUM(CASE WHEN [status] = -3 THEN 1 ELSE 0 END) AS 'OpenServices',
SUM(CASE WHEN [status] = -3 AND [description] LIKE '%DFC%' THEN 1 ELSE 0 END) AS 'DFC',
SUM(CASE WHEN DATEDIFF(day, closeDate, GETDATE()) = 1 THEN 1 ELSE 0 END) AS 'ClosedYesterday'
FROM
OSCL
GROUP BY
U_REGN
ORDER BY
'OpenServices' desc
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
246477 次 |
| 最近记录: |