(
[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方法把字符串最后一位开始,第一字符删除,插入空
–去除拼接的最后一个字符逗号