sql - 使用 COALESCE 合并多行

标签 sql sql-server-2012 coalesce

使用 SQL-Server 2012

我有下表:

Id      Description 
6192    Salzburg
6193    Salzburg
6194    Salzburg
6196    Innsbruck
6197    Innsbruck
6198    Innsbruck
6199    Innsbruck
6201    Bregenz
6202    Bregenz
6203    Bregenz

我想选择每个不同的“描述”,并将所有 ID 放在一个字符串中:

    Description     Ids
    Salzburg        '6192,6193,6194'
    Innsbruck       '6196,6197,6198'

我在这个网站上看到了一些类似的代码[ How to concatenate text from multiple rows into a single text string in SQL server? ,但我还无法弄清楚我的目的(不想使用 XML 路径!)。这是我到目前为止所尝试过的:

DECLARE @ids AS Nvarchar(MAX)
SELECT  @ids = COALESCE(@ids + ',', '') + CAST(t.Id AS nvarchar(5))
    FROM (SELECT tmp.Id FROM (SELECT id, [Description] FROM tblMasterPropValues WHERE IdCategory = 253 AND IsActive = 1) as tmp
        WHERE [Description] = tmp.[Description]) AS t
SELECT @ids
--SELECT DISTINCT [Description], @ids AS IDs FROM tblMasterPropValues WHERE IdCategory = 253 AND IsActive = 1 AND Id IN (@ids)

我实在无法理解这个问题,希望得到任何帮助。

最佳答案

您可以尝试使用STUFF()函数

SELECT description,  Ids = STUFF(
             (SELECT ',' + Id
              FROM tblMasterPropValues t1
              WHERE t1.description = t2.description
              FOR XML PATH (''))
             , 1, 1, '') from tblMasterPropValues t2
group by description;

关于sql - 使用 COALESCE 合并多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53391800/

相关文章:

java - jdbc中插入语句错误

html - 根据 HTML 中同一行的另一个单元格中的值更改表格单元格的 CSS

sql - Azure 数据传输身份列种子跃升 10,000

c# - SSIS 自定义数据流组件 - 重定向错误行

sql - 元组版本控制和复合主键

sql - 通过复制行和更改表结构从现有表创建新 View

用于查找名称的mysql查询包括特殊字符单引号

mysql - 即使该日期没有数据(在这种情况下,该行应该用零填充),如何为每个日期返回一行?

sql - 在同一条语句中合并和 Concat,Postgres

sql - 更高效的双重合并连接替代方案