X615769472 2022-01-15 13:24 采纳率: 100%
浏览 105
已结题

hive sql 行列转置问题

请教一个行列转置的问题,类似于excel中的透视表,下图中的数据,有办法用hive sql做出来吗?我能想到的方法是用多个union 把他们按照不同的职位合并到一起,还有其他的方法吗?

img

  • 写回答

2条回答 默认 最新

  • DarkAthena ORACLE应用及数据库设计方案咨询师 2022-01-15 14:48
    关注

    右边的6个列每2个列一组,加一个静态的职位字段,一共三个列,用union all拼接起来,再用字符串聚合把职位拼起来。这个方法应该是可用的。
    至于用lateral view explode进行行列转换的方法,我晚上回去再研究下


    弄出来了

    ---测试表
    CREATE TABLE TEST_TABLE2 (gs varchar(1),
    zybh int,zyxm varchar(10),
    zgbh int,zgxm varchar(10),
    jlbh int,jlxm varchar(10));
    ---测试数据
    insert into TEST_TABLE2 (GS, ZYBH, ZYXM, ZGBH, ZGXM, JLBH, JLXM)
    values ('A', 1, '张三', 1, '张三', 2, '李四');
    insert into TEST_TABLE2 (GS, ZYBH, ZYXM, ZGBH, ZGXM, JLBH, JLXM)
    values ('A', 3, '王五', 4, '赵六', 3, '王五');
    
    ---查询sql
    select gs ,xcode ,rcode ,concat_ws(',',collect_set(substr(rname,1,2))) as zw
      from (
        select gs, map("ZYBH", ZYBH
                         , "ZGBH", ZGBH
                         , "JLBH", JLBH) as rybh,map("ZYXM", ZYXM
                         , "ZGXM", ZGXM
                         , "JLXM", JLXM) as ryxm
        from TEST_TABLE2 ) x
      lateral view explode(rybh) exptbl1 as rname, rcode 
        lateral view explode(ryxm) exptbl1 as xname, xcode 
    where substr(rname,1,2)=substr(xname,1,2)
    group by gs,xcode,rcode
    

    实测截图

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 1月24日
  • 已采纳回答 1月16日
  • 创建了问题 1月15日

悬赏问题

  • ¥15 生成的QRCode圖片加上下載按鈕
  • ¥15 板材切割优化算法,数学建模,python,lingo
  • ¥15 科来模拟ARP欺骗困惑求解
  • ¥100 iOS开发关于快捷指令截屏后如何将截屏(或从截屏中提取出的文本)回传给本应用并打开指定页面
  • ¥15 unity连接Sqlserver
  • ¥15 图中这种约束条件lingo该怎么表示出来
  • ¥15 VSCode里的Prettier如何实现等式赋值后的对齐效果?
  • ¥15 流式socket文件传输答疑
  • ¥20 keepalive配置业务服务双机单活的方法。业务服务一定是要双机单活的方式
  • ¥50 关于多次提交POST数据后,无法获取到POST数据参数的问题