连接 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
找到了几个例子
但它似乎并不适用于我的场景。
您可以使用 string_agg()
:
select user, string_agg(value, ' ') within group(order by fieldid) as name
from mytable
group by user
如果总是只有 2 个 fieldid
,1
和 2
,那么您的条件聚合会更简单(并且适用于所有版本的 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
我正在使用 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
找到了几个例子
但它似乎并不适用于我的场景。
您可以使用 string_agg()
:
select user, string_agg(value, ' ') within group(order by fieldid) as name
from mytable
group by user
如果总是只有 2 个 fieldid
,1
和 2
,那么您的条件聚合会更简单(并且适用于所有版本的 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