在配置单元中将列数据分离为多个列

8xiog9wr  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(689)

我有一个包含两个控制器及其版本的设备的示例数据。样本数据如下:

device_id   controller_id  versions
123          1             0.1
123          2             0.15
456          2             0.25
143          1             0.35
143          2             0.36

上述数据应采用以下格式:

device_id   1st_ctrl_id_ver   2nd_ctrl_id_ver
123          0.1              0.15
456          NULL             0.25
143          0.35             0.36

我使用了以下不起作用的代码:

select
device_id,
case when controller_id="1" then versions end as 1st_ctrl_id_ver,
case when controller_id="2" then versions end as 2nd_ctrl_id_ver       
from device_versions

我得到的结果是:

device_id   1st_ctrl_id_ver   2nd_ctrl_id_ver
123          0.1              NULL
123          NULL             0.15
456          NULL             0.25
143          0.35             NULL
143          NULL             0.36

我不希望每行都有空值。有人能帮我写正确的代码吗?

1qczuiv0

1qczuiv01#

要将具有给定键的所有行“折叠”到一行,必须运行聚合。即使你在实践中没有真正地聚合价值。
像这样的 select device_id, MAX(case when controller_id="1" then versions end) as 1st_ctrl_id_ver, MAX(case when controller_id="2" then versions end) as 2nd_ctrl_id_ver from device_versions GROUP BY device_id 但请注意,当且仅当每个设备的每个控制器最多有一个条目时,此代码才会工作,并且任何版本高于2的控制器都将被忽略。换言之,它相当脆弱(但在SQLAnway中做得再好不过了)

相关问题