Hive中单列数据转多列:设备控制器版本转行实现求助
解决Hive中设备双控制器版本行转列问题
你的问题核心是行转列:原SQL只是逐行做了条件判断,但没有对同一device_id的多条记录进行聚合,所以每个控制器的版本会单独占一行,另一列自然显示NULL。
要把同一设备的两个控制器版本合并到一行,你需要用GROUP BY结合聚合函数(比如MAX()或MIN())来“收拢”同一设备的记录,过滤掉NULL值:
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;
为什么这样可行?
GROUP BY device_id会把同一设备的所有记录归为一组;MAX()函数会忽略NULL值,只保留每组中对应控制器ID的有效版本号(因为每个设备对每个控制器ID最多只有一条记录,所以MAX和MIN效果完全一致);- 最终每组会输出一行,正好是你想要的格式:同一设备的两个控制器版本在同一行,没有多余的NULL行。
执行这段SQL后,你会得到预期的输出:
device_id 1st_ctrl_id_ver 2nd_ctrl_id_ver 123 0.1 0.15 456 NULL 0.25 143 0.35 0.36
内容的提问来源于stack exchange,提问作者Sara
相关产品推荐
相关产品推荐

