首页 > 解决方案 > 如何将一个ID对应的多行变成单行 - 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 解决方案吗?

标签: presto

解决方案


我认为您可以使用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) → array<[same as input]> 返回从输入 x 元素创建的数组。


推荐阅读