我想要在一行中具有相同 ID 的行数据
Posted
技术标签:
【中文标题】我想要在一行中具有相同 ID 的行数据【英文标题】:I want row data of same id in one single row 【发布时间】:2020-06-16 05:00:01 【问题描述】:表格格式是这样的
ID | MID | PID | Quantity
1 | 1 | 2 | 3
2 | 1 | 3 | 10
3 | 2 | 2 | 11
4 | 2 | 1 | 5
我想得到如下结果
ID | MID | Final
1 | 1 | 2(3),3(10)
2 | 2 | 2(11),1(5)
【问题讨论】:
【参考方案1】:首先concate
两列然后做string_agg
。这是demo。
with cte as
(
select
mid,
concat(pid, '(', quantity, ')') as concat_col
from table1
)
select
row_number() over (order by mid) as id,
mid,
string_agg(concat_col, ', ') as final
from cte
group by
mid
输出:
| id | mid | final |
| --- | --- | ----------- |
| 1 | 1 | 2(3), 3(10) |
| 2 | 2 | 2(11), 1(5) |
如果您使用的是旧版本的 SQL Server,请尝试以下操作
with cte as
(
select
mid,
concat(pid, '(', quantity, ')') as concat_col
from table1
)
select
row_number() over (order by mid) as id,
mid,
stuff((
select ',' + concat_col
from cte c1
where c.mid = c1.mid
for XML PATH('')
), 1, 1, '') as final
from cte c
group by
mid
【讨论】:
它说'string_agg'不是一个公认的内置函数名。' 你使用的是哪个版本的sql server? Sql Server 2014 是的。完毕。工作顺利。谢谢【参考方案2】:select MID, string_agg(concat(PID, '(', Quantity,')'), ', ')
from dbo.Sample
group by MID
Result :
MID FINAL
1 2(3), 3(10)
2 2(11), 1(5)
【讨论】:
它说'string_agg'不是一个公认的内置函数名。'以上是关于我想要在一行中具有相同 ID 的行数据的主要内容,如果未能解决你的问题,请参考以下文章