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

SQL Server中按ID合并多行数据为单行的技术求助

问题:SQL Server 按ID聚合并填充有效字段值

原始数据集:

IDCoinWeightWarningNoteCountWarningNoteValueWarning
165NULLNULLNULL
165NULLNULLNULL
165NULL2000NULL
165NULLNULL75000
166NULLNULL75000
16610NULLNULL
166NULL2000NULL

需要转换为以下结果集:

IDCoinWeightWarningNoteCountWarningNoteValueWarning
165NULL200075000
16610200075000

测试表INSERT语句:

DECLARE @Test TABLE
              (Id int,
               CoinWeightWarning int, 
               NoteCountWarning int, 
               NoteValueWarning int)

INSERT INTO @Test
VALUES
(165, NULL, NULL, NULL)
,(165, NULL, NULL, NULL)
,(165, NULL, 2000, NULL)
,(165, NULL, NULL, 75000)
,(166, NULL, NULL, NULL)
,(166, NULL, NULL, NULL)
,(166, 10,   NULL, NULL)
,(166, NULL, NULL, NULL)
,(166, NULL, 2000, NULL)
,(166, NULL, NULL, 75000)

解决方案

使用聚合函数MAX()按ID分组,该函数会自动忽略NULL值,提取每个ID下对应字段的有效非空值;同时通过HAVING子句排除所有字段均为NULL的ID行:

SELECT 
    Id,
    MAX(CoinWeightWarning) AS CoinWeightWarning,
    MAX(NoteCountWarning) AS NoteCountWarning,
    MAX(NoteValueWarning) AS NoteValueWarning
FROM @Test
GROUP BY Id
HAVING 
    MAX(CoinWeightWarning) IS NOT NULL 
    OR MAX(NoteCountWarning) IS NOT NULL 
    OR MAX(NoteValueWarning) IS NOT NULL

说明

  • MAX()函数会忽略NULL,返回分组内对应字段的非空值(若业务中每个ID对应字段仅存在一个有效非空值,此方法完全适用;若存在多个非空值,会返回最大值)
  • HAVING子句用于过滤掉所有字段都为NULL的ID行,满足“无需保留仅含NULL值的行”的要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 11:15:11