只想看看是否有人能更好地完成我所需要的。
首先是背景。我的数据库中有一个表,当前有大约20,000行。在表中,我们有一列用于名字和姓氏。还有一个列是ReferenceID。每个ReferenceID可以有多个FirstName,LastName组合。
这意味着当我们从表中执行select *时,我们为每个ReferenceID返回了多行(因为每个用户都有一行)。
我想同时将这两列连接到一个名为Name的列中,同时将ReferenceID的每一行都变成一个。(基本上是将数据展平)。
让我尝试在此处绘制一个ASCII图。
TABLE
ID ReferenceID FirstName LastName
________________________________________________
1 1 Mike Ekim
2 1 Tom Mot
3 1 Pete Etep
4 2 Ryan Nayr
5 3 Jerry Yrrej
Run Code Online (Sandbox Code Playgroud)
所以我想要的最终结果是
RESULT SET
ReferenceID Name
__________________________________
1 Mike Ekim, Tom Mot, Pete Etep
2 Ryan Nayr
3 Jerry Yrrej
Run Code Online (Sandbox Code Playgroud)
我真正需要知道的是,在我开始使用COALESCE并尝试调整结果之前,是否有更好的方法来实现这一目标?使用SQL Server 2005。
干杯,
麦克风
以下是使用 xml 路径技术的方法(其中也有一个合并...)
SELECT DISTINCT n.ReferenceID,
STUFF((SELECT ', ' + COALESCE(n2.FirstName+' '+n2.LastName,n2.FirstName,n2.LastName,'NoName')
FROM namelist n2
WHERE n.referenceid = n2.referenceid
ORDER BY n2.lastname, n2.firstname
FOR XML PATH('')
), 1, 2, '') AS [Name]
FROM namelist n
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1816 次 |
| 最近记录: |