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

时间:2020-11-03 12:52:37

标签: 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解决方案吗?

1 个答案:

答案 0 :(得分:0)

我认为您可以使用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或具有空字符串''-使用空字符串可能会更复杂,并且所有列都需要类似的内容:< / p>

,MAX(case when Merk='' then NULL else Merk end) Merk

如果每个itemid都有多个条目,并且希望保留所有条目,则也可以使用array_agg

array_agg(x)→数组<[与输入相同]> 返回根据输入的x个元素创建的数组。

相关问题