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

如何将存储过程返回的多行结果合并为单行(去除空值)

如何将多季度SQL查询结果合并为单行并去除空值

我来帮你搞定这个问题!你当前的查询会针对每个季度返回单独一行,每行只有对应季度的Qx_Number和Qx_Date有值,其他列都是NULL。要把这些行合并成单行并自动去掉空值,用聚合函数配合分组就能轻松实现。

修改后的SQL代码

WITH cte_Sum AS (
    SELECT 
        SUM(NumberOfCode) AS NumberOfCode, 
        CodeName, 
        Code, 
        Quarters, 
        Q1s, 
        Q2s, 
        Q3s, 
        Q4s 
    FROM cte_totals 
    GROUP BY CodeName, Code, Quarters, Q1s, Q2s, Q3s, Q4s
)
SELECT 
    CodeName,
    Code,
    MAX(CASE WHEN Quarters = 'Q1' THEN NumberOfCode END) AS Q1_Number,
    MAX(CASE WHEN Quarters = 'Q1' THEN Q1s END) AS Q1_Date,
    MAX(CASE WHEN Quarters = 'Q2' THEN NumberOfCode END) AS Q2_Number,
    MAX(CASE WHEN Quarters = 'Q2' THEN Q2s END) AS Q2_Date,
    MAX(CASE WHEN Quarters = 'Q3' THEN NumberOfCode END) AS Q3_Number,
    MAX(CASE WHEN Quarters = 'Q3' THEN Q3s END) AS Q3_Date,
    MAX(CASE WHEN Quarters = 'Q4' THEN NumberOfCode END) AS Q4_Number,
    MAX(CASE WHEN Quarters = 'Q4' THEN Q4s END) AS Q4_Date
FROM cte_Sum
GROUP BY CodeName, Code; -- 核心:按CodeName和Code分组,聚合每个季度的字段

为什么这么做?

  • 每个CASE表达式只会在对应季度的行生成有效值,其他行都是NULL。
  • MAX()函数会自动忽略NULL值,只保留同一个CodeName+Code分组里每个季度字段的唯一有效值。
  • 如果NumberOfCode是数值型,用SUM()也能得到相同结果(因为每个季度只有一个非NULL值),但MAX()更通用,同时适合日期和数值类型。

这样处理后,同一个CodeName和Code的所有季度数据就会合并成一行,所有空值都会被自动过滤掉,完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:59:04