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

SQL行合并问题:GROUP BY导致多行输出,需聚合为单行

解决SQL多行合并为单行的问题

修改后的SQL代码

SELECT
    CH_USER4 AS 'Office',
    LEFT(CH_SORT, 3) AS 'Flt Lst Division',
    CH_USER5 AS 'Charter Type',
    CH_CODE AS 'Charter No',
    CH_DATE_REQ AS 'Flight Date',
    CAST(DATEPART(yyyy, CH_DATE_REQ) AS varchar(10)) + '-' + REPLACE(STR(DATEPART(mm, CH_DATE_REQ), 2), ' ', '0') AS 'Flight Month',
    MAX(C_COST - CH_ACTUAL_COST) AS 'Budget Outstanding',
    MAX(C_COST) AS 'Flt List Costs',
    SUM(
        CASE
            WHEN DET_NOM_YEAR = 'C' 
                 AND DET_PERIODNUMBR <= '7' 
                THEN IIF(DET_TYPE = 'CRN', -(DET_NETT), DET_NETT)
                ELSE 0
        END
    ) AS 'YTD Nominal',
    MAX(
        CASE
            WHEN CH_DATE_REQ >= '2023-02-01' 
                 AND CH_DATE_USER1 <= '2023-08-31' 
               THEN C_COST
               ELSE 0
        END
    ) AS 'C/Y Flt List Costs'
FROM 
    CST_COSTHEADER
LEFT JOIN 
    AT_BUDGETTOTAL ON CST_COSTHEADER.CH_CODE = AT_BUDGETTOTAL.CC_COPYHEADER
LEFT JOIN 
    SL_PL_NL_DETAIL on CST_COSTHEADER.CH_CODE = SL_PL_NL_DETAIL.DET_COSTHEADER
WHERE 
    CH_CODE = 'IR001565'
    AND DET_COSTCENTRE NOT LIKE 'ZINC'
GROUP BY 
    CH_USER4, CH_SORT, CH_USER5, CH_CODE, CH_DATE_REQ, CH_DATE_USER1

关键调整说明

  1. 简化GROUP BY子句:原GROUP BY包含了C_COST、DET_NETT等会拆分结果的字段,这些字段值的差异导致输出多行。现在只保留目标单行中唯一的字段(如Office、Charter No等),确保分组后仅生成一行结果。
  2. YTD Nominal改为求和:将原CASE表达式嵌套在SUM()函数中,累加所有符合条件的行的数值,得到总合9077.15。
  3. 调整C/Y Flt List Costs的聚合逻辑:将CASE内的MAX(C_COST)改为直接取C_COST,外层用MAX()包裹,确保获取符合日期条件的最大成本值18077.15。
  4. 保留原有MAX聚合字段:Budget Outstanding和Flt List Costs继续使用MAX(),确保取到你需要的最大值0和18077.15。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 11:12:28