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

SQL Server UNION拼接Group by查询后按日期去重分组问题求助

解决UNION拼接查询后日期重复的分组问题

问题说明

对两个通过UNION拼接的SELECT查询结果按Data列分组时,出现了重复的同日期值,需要实现同一日期仅返回一行数据的效果。

原因分析

  • 原始子查询的GROUP BY维度是完整的E3TimeStamp时间戳(包含时分秒),同一天内不同时间点的数据会被拆分为独立行
  • UNION仅对整行所有字段值完全一致的行进行去重,两个子查询返回的同一日期、但指标值不同的行无法被去重,因此出现日期重复

实现方案

将现有UNION整体作为内层子查询,外层按日期维度做二次聚合即可,建议将UNION替换为UNION ALL,避免不必要的去重开销,提升查询性能。

修改后完整代码

SELECT 
    CAST(t.Data AS DATE) AS Data,
    ROUND(SUM(t.PH_07),2) AS PH_07,
    ROUND(SUM(t.PH_08),2) AS PH_08,
    ROUND(SUM(t.PH_09),2) AS PH_09,
    ROUND(SUM(t.MDS),2) AS MDS,
    ROUND(SUM(t.MCCMP),2) AS MCCMP,
    ROUND(SUM(t.MDCMP),2) AS MDCMP,
    ROUND(SUM(t.MCF),2) AS MCF,
    ROUND(SUM(t.MDF),2) AS MDF,
    ROUND(SUM(t.ESC_04),2) AS ESC_04,
    ROUND(SUM(t.ESC_RET),2) AS ESC_RET
FROM (
    SELECT
        Tab_Dados_Producao.E3TimeStamp AS Data,
        ROUND(SUM(CASE WHEN Tab_Dados_Producao.Maquina = 'PH_07' THEN Tab_Dados_Producao.Valor ELSE 0 END),2) As 'PH_07',
        ROUND(SUM(CASE WHEN Tab_Dados_Producao.Maquina = 'PH_08' THEN Tab_Dados_Producao.Valor ELSE 0 END),2) As 'PH_08',
        ROUND(SUM(CASE WHEN Tab_Dados_Producao.Maquina = 'PH_09' THEN Tab_Dados_Producao.Valor ELSE 0 END),2) As 'PH_09',
        ROUND(SUM(CASE WHEN Tab_Dados_Producao.Maquina = 'MDS' THEN Tab_Dados_Producao.Valor ELSE 0 END),2) As 'MDS',
        ROUND(SUM(CASE WHEN Tab_Dados_Producao.Maquina = 'MCCMP' THEN  Tab_Dados_Producao.Valor ELSE 0 END),2) As 'MCCMP',
        ROUND(SUM(CASE WHEN Tab_Dados_Producao.Maquina = 'MDCMP'THEN Tab_Dados_Producao.Valor ELSE 0 END),2) As 'MDCMP',
        ROUND(SUM(CASE WHEN Tab_Dados_Producao.Maquina = 'MCF'THEN Tab_Dados_Producao.Valor ELSE 0 END),2) As 'MCF',
        ROUND(SUM(CASE WHEN Tab_Dados_Producao.Maquina = 'MDF'  THEN Tab_Dados_Producao.Valor ELSE 0 END),2) As 'MDF',
        ROUND(SUM(CASE WHEN Tab_Dados_Producao.Maquina = 'ESC_04'  THEN Tab_Dados_Producao.Valor ELSE 0 END),2) As 'ESC_04',
        ROUND(SUM(CASE WHEN Tab_Dados_Producao.Maquina = 'ESC_RET' THEN Tab_Dados_Producao.Valor ELSE 0 END),2) As 'ESC_RET'
    FROM 
        [E3_CERAL].[dbo].[Tab_Dados_Producao]
    WHERE
        MONTH((Tab_Dados_Producao.E3TimeStamp)) = '8' 
        AND DAY((Tab_Dados_Producao.E3TimeStamp)) = '16'
    GROUP BY 
        Tab_Dados_Producao.E3TimeStamp

    UNION ALL

    SELECT
        Tab_Dados_Escolha.E3TimeStamp AS Data,
        ROUND(SUM(CASE WHEN Tab_Dados_Escolha.Maquina = 'PH_07' THEN Tab_Dados_Escolha.Metrica ELSE 0 END),2) As 'PH_07',
        ROUND(SUM(CASE WHEN Tab_Dados_Escolha.Maquina = 'PH_08' THEN Tab_Dados_Escolha.Metrica ELSE 0 END),2) As 'PH_08',
        ROUND(SUM(CASE WHEN Tab_Dados_Escolha.Maquina = 'PH_09' THEN Tab_Dados_Escolha.Metrica ELSE 0 END),2) As 'PH_09',
        ROUND(SUM(CASE WHEN Tab_Dados_Escolha.Maquina = 'MDS' THEN Tab_Dados_Escolha.Metrica ELSE 0 END),2) As 'MDS',
        ROUND(SUM(CASE WHEN Tab_Dados_Escolha.Maquina = 'MCCMP' THEN Tab_Dados_Escolha.Metrica ELSE 0 END),2) As 'MCCMP',
        ROUND(SUM(CASE WHEN Tab_Dados_Escolha.Maquina = 'MDCMP'THEN Tab_Dados_Escolha.Metrica ELSE 0 END),2) As 'MDCMP',
        ROUND(SUM(CASE WHEN Tab_Dados_Escolha.Maquina = 'MCF'THEN Tab_Dados_Escolha.Metrica ELSE 0 END),2) As 'MCF',
        ROUND(SUM(CASE WHEN Tab_Dados_Escolha.Maquina = 'MDF'  THEN Tab_Dados_Escolha.Metrica ELSE 0 END),2) As 'MDF',
        ROUND(SUM(CASE WHEN Tab_Dados_Escolha.Maquina = 'ESC_04'  THEN Tab_Dados_Escolha.Metrica ELSE 0 END),2) As 'ESC_04',
        ROUND(SUM(CASE WHEN Tab_Dados_Escolha.Maquina = 'ESC_RET' THEN Tab_Dados_Escolha.Metrica ELSE 0 END),2) As 'ESC_RET'
    FROM 
        [E3_CERAL].[dbo].[Tab_Dados_Escolha]
    WHERE
        MONTH((Tab_Dados_Escolha.E3TimeStamp)) = '8' 
        AND DAY((Tab_Dados_Escolha.E3TimeStamp)) = '16'
    GROUP BY 
        Tab_Dados_Escolha.E3TimeStamp
) t
GROUP BY CAST(t.Data AS DATE)

原始查询结果示意图

查询结果示意图

内容的提问来源于stack exchange,提问作者Vitor Marques Lourenço

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 11:45:02