我正在尝试创建一个 select 语句来组合来自任何特定列上重复 ID 的值。
我的表是:
ID Name
---------
01 A
01 B
02 C
03 D
我怎样才能选择获取像这样的值:01 A, B for ID: 01. 目前,当我使用 Select * from Tablename 时,它列出了两行的 01 ID。我喜欢只将它组合成一行,对于任何重复的行,名称应该与逗号组合。
新代码:
select Name, ID = REPLACE
((select Surname AS [data()]
FROM Mytable
WHERE Name = d. Name
ORDER BY Name FOR XML path('')), ' ', REQUIRED SEPERATOR)
FROM Mytable d
WHERE Name IS NOT NULL
GROUP BY Name
非常感谢你!
MS SQL Server 2014 架构设置:
create table t (id int not null, name nvarchar(max) not null)
insert t (id, name) values
(1, 'A'),
(1, 'B'),
(1, 'C'),
(2, 'A'),
(2, 'D'),
(3, 'A'),
(3, 'F'),
(3, 'E')
查询 1:
select id, REPLACE
((select name AS [data()]
FROM t as t1
WHERE t1.id = t0.id
ORDER BY Name FOR XML path('')), ' ', ',')
FROM t as t0
GROUP BY id
结果:
| id | |
|----|-------|
| 1 | A,B,C |
| 2 | A,D |
| 3 | A,E,F |
更新为了处理名称中已有的空格,我们可以在分组之前将它们替换为下划线,并在分组之前替换回:
select id, replace(REPLACE
((select replace(name, ' ', '_') AS [data()]
FROM t as t1
WHERE t1.id = t0.id
ORDER BY Name FOR XML path('')), ' ', ','), '_', ' ')
FROM t as t0
GROUP BY id
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句