连接 SQL 服务器中的行

Concatenating rows in SQL Server

我正在使用 Microsoft SQL Server 2014 (SP2) (KB3171021) - 12.0.5000.0 (X64)

我正在尝试获取如下所示的数据:

User    FieldId     Value
----------------------------
1       1           John
1       2           Smith
2       1           Roberta
2       2           Smith
3       1           Mark
3       2           Smith

并将其转换为:

User Name
-------------------
1    John Smith
2    Roberta Smith
3    Mark Smith

我在 https://www.mytecbits.com/microsoft/sql-server/concatenate-multiple-rows-into-single-string#:~:text=SQL%20Server%3A%20Concatenate%20Multiple%20Rows%20Into%20Single%20String,version%202008%20and%20higher.%20...%203%20Using%20STRING_AGG

找到了几个例子

但它似乎并不适用于我的场景。

您可以使用 string_agg():

select user, string_agg(value, ' ') within group(order by fieldid) as name
from mytable
group by user

如果总是只有 2 个 fieldid12,那么您的条件聚合会更简单(并且适用于所有版本的 SQL 服务器) :

select user,
    max(case when fieldid = 1 then value end) 
        + ' ' 
        + max(case when fieldid = 2 then value end) as name
from mytable
group by user

如果你总是在任何地方都有准确的 FieldId 1 和 2,你可以使用下面的代码:

select x1.User, concat(x1.Value,' ',x2.Value)
FROM
(select User,Value from tablename where FieldId = 1) as x1
inner join
(select User,Value from tablename where FieldId = 2) as x2
on x1.User = x2.User

它的工作原理是首先创建两个数据集,一个是来自 table 的用户和值数据,FieldID = 1,另一个是 FieldID = 2 看起来像这样:

x1

User         Value
--------------------
1            John
2            Roberta
3            Mark

x2
User         Value
---------------------
1            Smith
2            Smith
3            Smith

然后它将它们连接成一个table,我们可以从中简单地连接所需的字符串

x1.User  x1.Value  x2.Value
----------------------------
1       John        Smith
2       Roberta     Smith
3       Mark        Smith