COALESCE是实现这一目标的最佳方法吗?

5 sql sql-server-2005

只想看看是否有人能更好地完成我所需要的。

首先是背景。我的数据库中有一个表,当前有大约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。

干杯,

麦克风

Hog*_*gan 4

以下是使用 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)