Мне нужны данные строки с одинаковым идентификатором в одной строке - PullRequest
0 голосов
/ 16 июня 2020

Формат таблицы похож на

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)

Ответы [ 2 ]

1 голос
/ 16 июня 2020

сначала concate два столбца, а затем string_agg. Вот демонстрация .

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
0 голосов
/ 16 июня 2020
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)
...