如何在一个 SQL Server 查询中组合不同的计数
Posted
技术标签:
【中文标题】如何在一个 SQL Server 查询中组合不同的计数【英文标题】:How to combine different counts in one SQL Server query 【发布时间】:2014-09-01 17:41:08 【问题描述】:我想在一个查询中组合不同的 Count 语句,以便最终查询只为每个 Count 返回一个数字(总数)。
以下查询单独工作,但我无法找到一种方法来组合它们而不重复相同的结果(嵌套表)并且不会丢失每个查询的单独名称(Union All)。
我的 SQL(只是为了方便查看在这里):
(
SELECT COUNT(*) OVER() AS countB
FROM MOC_Log2 B
WHERE B.modBy = @modBy
AND B.lastUpdate = 'Added'
FOR XML PATH(''), ELEMENTS, TYPE
),
(
SELECT COALESCE(SUM(D.vote), '0') AS countC
FROM MOC_Log3 C
LEFT JOIN MOC_Log3_Votes D
ON D.itemID = C.itemID
WHERE C.modBy = @modBy
AND C.lastUpdate = 'Added'
FOR XML PATH(''), ELEMENTS, TYPE
),
(
SELECT COALESCE(SUM(F.vote), '0') AS countE
FROM MOC_Log4 E
LEFT JOIN MOC_Log4_Votes F
ON F.itemID = E.itemID
WHERE E.modBy = @modBy
AND E.lastUpdate = 'Added'
FOR XML PATH(''), ELEMENTS, TYPE
)
【问题讨论】:
【参考方案1】:只添加空列?
SELECT COUNT(*) OVER() AS countB,
Null AS countC,
Null AS countE
FROM MOC_Log2 B
WHERE B.modBy = @modBy
AND B.lastUpdate = 'Added'
FOR XML PATH(''), ELEMENTS, TYPE
Union
SELECT null,
COALESCE(SUM(D.vote), '0'),
null
FROM MOC_Log3 C
LEFT JOIN MOC_Log3_Votes D
ON D.itemID = C.itemID
WHERE C.modBy = @modBy
AND C.lastUpdate = 'Added'
FOR XML PATH(''), ELEMENTS, TYPE
Union
SELECT null,
null,
COALESCE(SUM(F.vote), '0')
FROM MOC_Log4 E
LEFT JOIN MOC_Log4_Votes F
ON F.itemID = E.itemID
WHERE E.modBy = @modBy
AND E.lastUpdate = 'Added'
FOR XML PATH(''), ELEMENTS, TYPE
另请注意,我使用 Union 而非 Union all。很难判断这是否对您有用,因为我无法判断额外的空列是否会导致一些错误。
【讨论】:
这很好用 - 非常感谢有趣的解决方法! :)以上是关于如何在一个 SQL Server 查询中组合不同的计数的主要内容,如果未能解决你的问题,请参考以下文章