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

SQL Server 2012:获取ID为0的计数与Name拼接的单行两列结果

解决SQL Server 2012的统计与字符串拼接需求

我来帮你搞定这个需求!先明确你的场景:

表结构与测试数据

你的table_1表结构和数据如下:

CREATE TABLE table_1 ([ID] BIT, [Name] VARCHAR(10)) 
INSERT INTO table_1 ([ID],[Name]) VALUES (1,'A') 
INSERT INTO table_1 ([ID],[Name]) VALUES (0,'B') 
INSERT INTO table_1 ([ID],[Name]) VALUES (0,'C') 

需求说明

需要返回单行两列的结果:

  • col_1:ID字段值为0的记录数量
  • col_2:这些ID=0的记录对应的Name字段拼接后的字符串;如果没有符合条件的记录(计数为0),则显示NA或空值

完整解决方案SQL

你现有的SQL只实现了计数部分,我帮你补充字符串拼接和空值处理的逻辑,用SQL Server 2012支持的语法实现:

SELECT 
    -- 统计ID=0的记录数,无匹配时返回0
    COUNT(CASE WHEN ID = 0 THEN 1 END) AS col_1,
    -- 拼接Name字符串,无匹配时返回'NA'(换成''就是空值)
    ISNULL(STUFF((
        SELECT ',' + Name 
        FROM table_1 
        WHERE ID = 0 
        FOR XML PATH(''), TYPE
    ).value('.', 'VARCHAR(MAX)'), 1, 1, ''), 'NA') AS col_2
FROM table_1;

代码解释

  • 计数逻辑:COUNT(CASE WHEN ID=0 THEN 1 END) 会遍历所有记录,只统计ID=0的行,没有匹配时返回0,确保始终返回单行结果。
  • 字符串拼接:STUFF + FOR XML PATH('') 是SQL Server 2012中实现字符串聚合的经典写法:
    • FOR XML PATH('') 把符合条件的Name行拼接成类似,B,C的XML字符串
    • STUFF(...,1,1,'') 去掉开头的逗号,得到B,C
  • 空值处理:ISNULL(..., 'NA') 会在没有匹配记录时,把拼接结果的NULL替换成NA,如果需要空值,把'NA'改成''即可。

测试验证

  • 当表中有ID=0的记录时,结果为:col_1=2, col_2='B,C'
  • 当表中没有ID=0的记录时,结果为:col_1=0, col_2='NA'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:32:40