SQL 多行转成一列

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
--创建表




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)
          )
          --插入例子数据
          
          
          
SELECT * FROM  a 
--查询表


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

--把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

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






SELECT name,LEFT(valuenew,LEN(valuenew)-1)as valuenew,LEN(LEFT(valuenew,LEN(valuenew)-1)) as valuenewlen,LEN(a.valuenew)AS 原长度 FROM (
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 )  a
--left方法保留字符串的长度减一的字符串
--或
SELECT name,STUFF(a.valuenew,LEN(a.valuenew),1,'') as valuenew ,LEN(STUFF(a.valuenew,LEN(a.valuenew),1,'')) as valuenewlen,LEN(a.valuenew)AS 原长度 FROM (
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)  a 
--stuff方法把字符串最后一位开始,第一字符删除,插入空

--去除拼接的最后一个字符逗号























评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值