You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server 2014合并两表统计结果并添加总行求和问题

解决SQL Server 2014中联合查询的汇总行问题

你的问题出在最后一个UNION部分的LEFT OUTER JOIN逻辑上——这个关联操作并不是在统计两个表关联ALL_USERS后的总行数,而是把SIGMA_TEST和BETA_TEST按DOMID关联后的行数,这和你需要的“两个分组查询结果的COUNT总和”完全不是一回事。

修正后的查询(无需CTE)

这里我们用UNION ALL来保留两个分组查询的所有结果(如果你的业务需要去重,可以换回UNION),然后单独计算两个关联查询的行数总和作为TOTAL行:

-- 第一个分组统计:SIGMA_TEST关联ALL_USERS
SELECT A.TEST_CODE, B.DIVISION, COUNT(*) AS [Count]
FROM ALL_USERS B
JOIN SIGMA_TEST A ON B.DOMID = A.DOMID
GROUP BY A.TEST_CODE, B.DIVISION

UNION ALL

-- 第二个分组统计:BETA_TEST关联ALL_USERS
SELECT E.TEST_CODE, F.DIVISION, COUNT(*) AS [Count]
FROM ALL_USERS F
JOIN BETA_TEST E ON E.DOMID = F.DOMID
GROUP BY E.TEST_CODE, F.DIVISION

UNION ALL

-- 汇总行:计算两个关联查询的总行数之和
SELECT 'TOTAL', '', SUM([Count]) AS [Count]
FROM (
    -- 分别计算两个关联查询的行数
    SELECT COUNT(*) AS [Count]
    FROM ALL_USERS B
    JOIN SIGMA_TEST A ON B.DOMID = A.DOMID

    UNION ALL

    SELECT COUNT(*) AS [Count]
    FROM ALL_USERS F
    JOIN BETA_TEST E ON E.DOMID = F.DOMID
) AS SubTotal

为什么你的原始汇总逻辑不对?

你用LEFT OUTER JOIN SIGMA_TEST A ON A.DOMID = E.DOMID得到的是:

  • 保留SIGMA_TEST的所有行,匹配到BETA_TEST的行会合并,没匹配到的BETA_TEST列显示NULL
  • COUNT(*)会把这些包含NULL的行也统计进去,但这并不是你需要的“两个表分别关联ALL_USERS后的行数总和”,而是两个表按DOMID关联后的行数,自然会和预期的6不符。

额外简化方案

如果你只是需要分组统计+总行数汇总,也可以把计算总行数的部分直接写成子查询相加,省去内层的UNION ALL:

SELECT A.TEST_CODE, B.DIVISION, COUNT(*) AS [Count]
FROM ALL_USERS B
JOIN SIGMA_TEST A ON B.DOMID = A.DOMID
GROUP BY A.TEST_CODE, B.DIVISION

UNION ALL

SELECT E.TEST_CODE, F.DIVISION, COUNT(*) AS [Count]
FROM ALL_USERS F
JOIN BETA_TEST E ON E.DOMID = F.DOMID
GROUP BY E.TEST_CODE, F.DIVISION

UNION ALL

SELECT 'TOTAL', '', 
    (SELECT COUNT(*) FROM ALL_USERS B JOIN SIGMA_TEST A ON B.DOMID = A.DOMID) +
    (SELECT COUNT(*) FROM ALL_USERS F JOIN BETA_TEST E ON E.DOMID = F.DOMID) AS [Count]

内容的提问来源于stack exchange,提问作者Nick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:51:47