Oracle -Pivot的 行变列的具体操作

Oracle 数据操作中经常遇见行变列的需求,即部分数据是按照行存储的, 但需求中需要将行以某一字段

为轴变为单行列式展示 (“轴” 即是 本来显示在行上的列,转而显示在列的名称, 即需要行转列的字段)

 

Oracle基础语法 (Pivot)

select 字段1,字段2,字段3,字段4,字段5 from

piovt(Max(字段2)AS XX, Max(字段3)    --------pivot 中需要显示的值必须是聚合函数,这部分数据将显示在表格中, AS XX 别名将做为行名的后缀

for 字段1                ---------for 语句为pivot函数中属于轴的字段  该字段中得值或设定的别名将作为结果中的列名前缀

in (字段1行中具体的值   as 别名) );    -----in () 部分函数限定 for 字段1 中字段1的选值范围。如果值不固定,可以在select                                                                          中加入row_number() over(par....) 字段,以行号进行设定。 

说明 1: Pivot函数中变为列的数据有in 中限定几个值 和 Pivot所聚合的字段决定,例, in中选定3个值,piovt中有2个字段, 最后的列数为 ( in中选中得值数 * pivot设定的字段),一共6列被列出

2: 未选中的字段如字段4,字段5将会自动进行去重操作, 即最小化最终行数。 

 

举例:

某一XCL项目需要从instalment_head 中选定几期instal数据, 最终将这几期数据进行横向展示

基础代码

select t.SKP_CREDIT_CASE, t.DATE_INSTALMENT,t.DATE_PAY_INSTALMENT, t.DATE_PAY_LAST, rownum  as rn from OWNER_DWH.F_INSTALMENT_HEAD_AD t 
where  t.SKP_CREDIT_CASE = '220096621'
and t.DATE_INSTALMENT > trunc(sysdate) +3
and t.DATE_INSTALMENT < add_months(trunc(sysdate) +3 , 4)

结果

    SKP_CREDIT_CASE DATE_INSTALMENT DATE_PAY_INSTALMENT DATE_PAY_LAST RN
1 220096621 2018/11/1 2018/9/3 2018/9/3 1
2 220096621 2019/2/1 2018/9/8 2018/9/8 2
3 220096621 2018/12/1 2018/9/3
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值