SQL 多行转一列

1、创建表

CREATE TABLE [dbo].[a]
(
[id] [nchar] (10) COLLATE Chinese_PRC_CI_AS NULL,
[name] [nchar] (10) COLLATE Chinese_PRC_CI_AS NULL,
[value] [nchar] (10) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO

2、插入数据

INSERT INTO dbo.a ( id, name, value )
VALUES  ( N'1', -- id - nchar(10)
          N'张三', -- name - nchar(10)
          N'1'  -- value - nchar(10)
          ),
          ( N'2', -- id - nchar(10)
          N'张三', -- name - nchar(10)
          N'2'  -- value - nchar(10)
          ),
          ( N'3', -- id - nchar(10)
          N'李四 ', -- name - nchar(10)
          N'1'  -- value - nchar(10)
          ),
          ( N'4', -- id - nchar(10)
          N'李四', -- name - nchar(10)
          N'2'  -- value - nchar(10)
          ),
          ( N'5', -- id - nchar(10)
          N'王五', -- name - nchar(10)
          N'1'  -- value - nchar(10)
          ),
          ( N'6', -- id - nchar(10)
          N'王五', -- name - nchar(10)
          N'2'  -- value - nchar(10)
          )

3、查询表

SELECT * FROM  a 

 4、把value列拼接起来,并用逗号分隔

SELECT rTRIM(a.value)+','   FROM a  FOR XML PATH('') 

 5、按照name分组,计算当前name的value值的拼接

SELECT b.name,(SELECT rTRIM(value)+','  FROM a WHERE name=b.name FOR XML PATH('')) AS valuenew FROM dbo.a AS b  GROUP BY name

本文转载于 https://blog.csdn.net/ruo40018293/article/details/80880996

原文地址:https://www.cnblogs.com/ZQ1437487263/p/14447185.html