我想要在一行中具有相同 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 的行数据的主要内容,如果未能解决你的问题,请参考以下文章

使用java在sql中查找具有相同数据的具有相同值的行?

将 SQL 数据插入具有相同 ID 的行中?

从具有相同 ID 的行创建列

如何将转换后的行汇总并集中到一个具有相同 ID 的字段中?

如何在pyspark中使用具有相同客户ID的新数据框的值更新一行旧数据框

如果满足一行的条件,则删除多行