Oracle中使用pivot的问题

tabletest:
div_code payout_kind_name money
101001 物价生活性补贴 1200
101001 在职工伤保险 800
101001 基本离退休费 4000
101001 在职工伤保险 300
我要转换成:
div_code 物价生活性补贴 在职工伤保险 基本离退休费
101001 1200 1100 4000
我写的语句:
select 物价生活性补贴,在职工伤保险 from
(select payout_kind_name,F1 from fb_u_payout_budget)
pivot(sum(F1) for payout_kind_name in (物价生活性补贴,在职工伤保险))
执行不成功,问题出在哪

pivot  这个是sqlserver的函数啊,


oracle 中没有的。


用这个吧:

select div_code,sum(case when payout_kind_name = '物价生活性补贴’ then money else 0 end) 物价生活性补贴,
sum(case when payout_kind_name = '在职工伤保险’ then money else 0 end) 在职工伤保险,
sum(case when payout_kind_name = '基本离退休费’ then money else 0 end) 基本离退休费from fb_u_payout_budget
group by  div_code


20201222更改:oracle11g增加了pivot和unpivot;我孤陋寡闻一直没接触过,竟然以为不支持;增加pivot的写法,以免误导后来者;感谢追答两位的提醒:

select * from fb_u_payout_budget
pivot(sum(money) 
      for payout_kind_name 
        in ('物价生活性补贴' as 物价生活性补贴,'在职工伤保险' as 在职工伤保险,'基本离退休费' as 基本离退休费));
        
select 物价生活性补贴,在职工伤保险 from
(select payout_kind_name,money from fb_u_payout_budget)
pivot(sum(money) for payout_kind_name in ('物价生活性补贴' as 物价生活性补贴,'在职工伤保险' as 在职工伤保险));

温馨提示:答案为网友推荐,仅供参考
相似回答