【问题标题】:How to combine different counts in one SQL Server query如何在一个 SQL Server 查询中组合不同的计数
【发布时间】: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
)

【问题讨论】:

    标签: sql sql-server select count union-all


    【解决方案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。很难判断这是否对您有用,因为我无法判断额外的空列是否会导致一些错误。

    【讨论】:

    • 这很好用 - 非常感谢有趣的解决方法! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多