如何将与一个 ID 对应的多行转换为单行 - Presto

How to turn multiple rows corresponding with one ID into single row - Presto

提问人:justnewbie89 提问时间:11/3/2020 最后编辑:justnewbie89 更新时间:11/4/2020 访问量:690

问:

我正在寻找转换以下数据的方法

"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
Kadaluarsa 有两个条目,您如何决定选择哪个条目?第一个?
0赞 justnewbie89 11/4/2020
嗨,@PhilippJohannis感谢您的回复。我已经修改了示例数据。

答:

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 元素创建的数组。