sql求助impala

怎么把右边的变成左边的image.png

FineReport 东云川 发布于 2024-10-28 16:45 (编辑于 2024-10-28 16:45)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共4回答
最佳回答
0
华莉星宸Lv7资深互助
发布于2024-10-28 16:47
最佳回答
0
CD20160914Lv8专家互助
发布于2024-10-28 16:51(编辑于 2024-10-28 16:53)

impala不像其它数据库提供了PIVOT关键字,那么方便,你参考类似下面的语句吧

SELECT 

    salesperson,

    MAX(CASE WHEN month = 'Jan' THEN amount ELSE 0 END) AS Jan,

    MAX(CASE WHEN month = 'Feb' THEN amount ELSE 0 END) AS Feb,

    MAX(CASE WHEN month = 'Mar' THEN amount ELSE 0 END) AS Mar,

    -- 继续添加其他月份...

FROM sales

GROUP BY salesperson

方式二

WITH aggregated_sales AS (

  SELECT 

      salesperson,

      COLLECT_LIST(month) AS months,

      COLLECT_LIST(amount) AS amounts

  FROM sales

  GROUP BY salesperson

)

SELECT 

  salesperson,

  months[0] AS month1,

  amounts[0] AS amount1,

  months[1] AS month2,

  amounts[1] AS amount2,

  -- 根据需要添加更多的列...

FROM aggregated_sales;

最佳回答
0
FR-LeonLv3见习互助
发布于2024-10-28 16:55

你直接查一行的union吧

最佳回答
0
用户Q2815112Lv2见习互助
发布于2024-10-28 16:58(编辑于 2024-10-28 16:59)

使用case when+聚合函数就可以了。如下:

WITH t1 as ( select '昨日库存' as `分类`,8000 as `进出库存` union all select '入库' as `分类`,5000 as `进出库存` union all select '出库' as `分类`,-2000 as `进出库存` union all select '当日库存' as `分类`,11000 as `进出库存` ) select  max(case when `分类` ='昨日库存' then `进出库存` else null end ) as `昨日库存`, max(case when `分类` ='入库' then `进出库存` else null end ) as `入库`, max(case when `分类` ='出库' then `进出库存` else null end ) as `出库`, max(case when `分类` ='当日库存' then `进出库存` else null end ) as `当日库存` FROM t1

  • 5关注人数
  • 120浏览人数
  • 最后回答于:2024-10-28 16:59
    请选择关闭问题的原因
    确定 取消
    返回顶部