Tsql 当另一列重复时连接列

Tsql 当另一列重复时连接列,tsql,sql-server-2012,Tsql,Sql Server 2012,如何使下面的表变成串联形式 1844|a 1847|a,b 1848|34,qaz 你好 这个问题的标签是“sql-server-2012”,但如果不先说明用sql解决这类问题有多么简单,我就很难给出答案 因此,首先,我将添加示例DDL+DML的代码(创建相关表并插入示例数据),这是提问者必须在问题中添加的内容,但没有添加到此处 其次,我将在SQL Server 2017及更高版本中展示解决方案 最后,我将为较旧版本(如SQL Server 2012)提供解决方案 祝你玩得开心,我建议你通读

如何使下面的表变成串联形式

1844|a 
1847|a,b
1848|34,qaz
你好

这个问题的标签是“sql-server-2012”,但如果不先说明用sql解决这类问题有多么简单,我就很难给出答案

因此,首先,我将添加示例DDL+DML的代码(创建相关表并插入示例数据),这是提问者必须在问题中添加的内容,但没有添加到此处

其次,我将在SQL Server 2017及更高版本中展示解决方案

最后,我将为较旧版本(如SQL Server 2012)提供解决方案

祝你玩得开心,我建议你通读

DDL+DML 注意与其在您的表格上张贴图片和故事,不如向我们展示一种简单的方法来重现该问题这意味着当您遇到与查询相关的问题时,您应该向我们提供查询,以创建样本表(包括索引)并插入样本数据。此外,还应添加此处提供的请求结果

SQL Server 2017及以上版本的解决方案
我希望这能解决问题;-)

可能的重复我打算把这个问题标记为重复,但是你的答案比我想的问题的答案要好,所以+1.谢谢。很高兴在这里见到你,佐哈尔,正如你所注意到的,我只是来拜访一下斯塔克斯沃夫:-)
/*************************** DDL+DML */

drop table if exists T; -- this work only from SQL Server 2016
create table T(id int, txt nvarchar(10))
GO

INSERT T(id,txt) 
values (1844,'a'),(1847,'a'),(1847,'b'),(1848,'34'),(1848,'q')
GO

Select * from T
GO
/*************************** Solution */
-- New from 2016: STRING_SPLIT ( string , separator )  
-- New from 2017: STRING_AGG ( expression, separator ) [ <order_clause> ]
SELECT id,STRING_AGG(ISNULL(txt,''), ',') WITHIN GROUP (order by id)
from T
group by id
GO
SELECT
    id,
    STUFF(
        (
            SELECT ',' + t_in.txt
            FROM T t_in
            WHERE (t_in.id  = t_out.id)
            FOR XML PATH ('')
        ),1,1,''
    ) AS NameValues
FROM T t_out
GROUP BY id
GO