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

SQL双JOIN查询出现重复数据 如何实现两表字段分别求和去重输出

问题原因

直接关联两个独立子表会产生笛卡尔积:单个人员ID对应4条dbo_Z_Ferien记录和96条dbo_Z_ERFASSUNG记录,关联后会生成4×96=384条冗余数据,导致记录重复、求和结果错误。

解决方案

根据你需要的结果格式二选一即可:

方案1:每个人员ID输出1行汇总结果

先分别对两个子表做聚合运算,再和主表关联,从根源避免笛卡尔积:

SELECT 
    p.LPE_ID AS PersID,
    ISNULL(e.sum_erf, 0) AS Erf,
    ISNULL(f.sum_fer, 0) AS Fer
FROM dbo_A_PERSONAL p
LEFT JOIN (
    SELECT 
        ZER_LPE,
        SUM(ZER_Std100) AS sum_erf
    FROM dbo_Z_ERFASSUNG
    WHERE ZER_EIGENSCH = 3
    GROUP BY ZER_LPE
) e ON p.LPE_ID = e.ZER_LPE
LEFT JOIN (
    SELECT 
        ZFE_LPE_ID,
        SUM(ZFE_TAGE) AS sum_fer
    FROM dbo_Z_Ferien
    GROUP BY ZFE_LPE_ID
) f ON p.LPE_ID = f.ZFE_LPE_ID
WHERE p.LPE_ID = 804

方案2:输出示例中的分条展示格式

用UNION ALL拼接两个子表的查询结果,无对应值的字段填0即可匹配你给出的示例格式:

SELECT 
    ZER_LPE AS PersID,
    ZER_Std100 AS Erf,
    0 AS Fer
FROM dbo_Z_ERFASSUNG
WHERE ZER_EIGENSCH = 3 AND ZER_LPE = 804

UNION ALL

SELECT 
    ZFE_LPE_ID AS PersID,
    0 AS Erf,
    ZFE_TAGE AS Fer
FROM dbo_Z_Ferien
WHERE ZFE_LPE_ID = 804

ORDER BY PersID, Erf DESC

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 15:48:01