将同一列中的字符串折叠为一个单元格,具体取决于其他列

时间:2018-12-19 10:45:13

标签: sql amazon-redshift string-aggregation

我在数据(位置)中有一列带有字符串值,我想按vso /类型组合将其折叠成一个单元格/行。这是我目前拥有的:

SELECT vso, type, mp, loc, qty
FROM main

vso type mp   loc      qty
D13  S   UK   CW1     29252
D13  S   DE   FR6      5799
D13  N   UK   CW1        38
D13  N   DE   FR1         9

我想要的输出:

vso type   loc        total_qty
D13  S     CW1, FR6     35324
D13  N     CW1, FR1       47

我想基本的设置应该是这样的:

SELECT vso, type, SUM(qty) as total_qty, [some sort of concat function of loc]
FROM [table above]
GROUP BY vso, type

但是我不确定该如何处理loc列。理想情况下,如果每个vso和每个类型的loc值相同,则我只希望显示其中之一,而不显示重复项。

顺便说一句,我正在AWS Redshift中做到这一点。

1 个答案:

答案 0 :(得分:2)

使用listagg

SELECT vso, type, SUM(qty) as total_qty, listagg(loc ,', ') 
within group (order by type)
FROM [table above]
GROUP BY vso, type