为每个不同的名称值连接不同的姓氏值
Concatenate distinct surname values for each distinct name value
我想要实现的是为每个 DISTINCT 名称值连接所有 DISTINCT 姓氏值。
我所管理的是 DISTINCT 名称值的串联,但不幸的是所有姓氏值。
下面是我的代码:
SELECT DISTINCT ST2.[Name],
SUBSTRING(
(
SELECT ','+ST1.Surname AS [text()]
FROM [Ext_Names] ST1
WHERE ST1.[Name] = ST2.[Name]
ORDER BY ST1.[Name]
FOR XML PATH ('')
), 2, 1000) [Surname]
FROM [Ext_Names] ST2
示例数据
结果
期望输出
您需要先 select 不同的值,然后聚合。如果你是 运行 SQL Server 2017 或更高版本,你可以使用 string_agg()
:
select name, string_agg(surname, ',') within group (order by surname) surnames
from (select distinct name, surname from ext_names) t
group by name
你可以完成这个。
SELECT DISTINCT ST2.[Name], SUBSTRING((SELECT ','+ T.Surename AS [text()] FROM (SELECT DISTINCT ST1.Surename FROM Ext_Names ST1 WHERE ST1.Name = ST2.Name ) T ORDER BY T.Surename FOR XML PATH('')),2,1000) [SureEname]
FROM Ext_Names ST2
我想要实现的是为每个 DISTINCT 名称值连接所有 DISTINCT 姓氏值。
我所管理的是 DISTINCT 名称值的串联,但不幸的是所有姓氏值。
下面是我的代码:
SELECT DISTINCT ST2.[Name],
SUBSTRING(
(
SELECT ','+ST1.Surname AS [text()]
FROM [Ext_Names] ST1
WHERE ST1.[Name] = ST2.[Name]
ORDER BY ST1.[Name]
FOR XML PATH ('')
), 2, 1000) [Surname]
FROM [Ext_Names] ST2
示例数据
结果
期望输出
您需要先 select 不同的值,然后聚合。如果你是 运行 SQL Server 2017 或更高版本,你可以使用 string_agg()
:
select name, string_agg(surname, ',') within group (order by surname) surnames
from (select distinct name, surname from ext_names) t
group by name
你可以完成这个。
SELECT DISTINCT ST2.[Name], SUBSTRING((SELECT ','+ T.Surename AS [text()] FROM (SELECT DISTINCT ST1.Surename FROM Ext_Names ST1 WHERE ST1.Name = ST2.Name ) T ORDER BY T.Surename FOR XML PATH('')),2,1000) [SureEname]
FROM Ext_Names ST2