提问人:justnewbie89 提问时间:11/3/2020 最后编辑:justnewbie89 更新时间:11/4/2020 访问量:690
如何将与一个 ID 对应的多行转换为单行 - Presto
How to turn multiple rows corresponding with one ID into single row - Presto
问:
我正在寻找转换以下数据的方法
"itemid" "attr_id" "Merk" "Berat" "Panjang" "BPOM" "TInggi" "Kadaluarsa"
3624918424 14718 "Hansaplast" "" "" "" "" ""
3624918424 22229 "" "" "" "" "" "24 Bulan"
进入这个
itemid Merk Berat Panjang BPOM TInggi Kadaluarsa
3624918424 Hansaplast 24 Bulan
我在 SO 中检查了另一个问题,最流行的答案是使用 PIVOT 函数。但该功能在 Presto 中不存在。有人可以使用 Presto 获得解决方案吗?
答:
0赞
Philipp Johannis
11/4/2020
#1
我认为您可以只使用子句来获得所需的结果:GROUP BY
SELECT itemid
,MAX(Merk) Merk
,MAX(Berat) Berat
,MAX(Panjang) Panjang
,MAX(BPOM) BPOM
,MAX(TInggi) TInggi
,MAX(Kadaluarsa) Kadaluarsa
from data_table
GROUP BY itemid
在您的示例中不清楚列是否为空字符串或是否为空字符串 - 对于空字符串,它可能会更复杂一些,您需要所有列都这样的东西:NULL
''
,MAX(case when Merk='' then NULL else Merk end) Merk
如果每个 itemid 有多个条目,并且想要保留所有条目,则还可以使用array_agg
:
array_agg(x) →数组<[与输入相同]>返回从输入 x 元素创建的数组。
评论