行转列,列转行

第二种方法
  select s.c_empid,sum(decode(dp.c_name,'基本工资一基础工资',nvl(s.c_value, 0))) as "基础工资", 
       sum(decode(dp.c_name,'基本工资一加班费',nvl(s.c_value, 0))) as "加班费",
       sum(decode(dp.c_name,'基本工资一岗位月度工资',nvl(s.c_value, 0))) as "岗位月度工资"       
     from tb_cnb_otherpays_component dp
     left join (select C_OID,C_COMPENTID,C_GROUPID,C_YEAR,C_MONTH,C_VALUE,C_OPERATORID,C_OPERATETIME,C_EMPID,C_STATUS
                  from tb_cnb_otherpays_details ds
                 where ds.c_year = 2014
                   AND DS.C_GROUPID = 156075017
                   AND DS.C_MONTH = 5
                   and ds.c_empid in(21279974,21278721)
                   ) s
       on dp.c_oid = s.c_compentid 
       group by s.c_empid

 
 

需要把上图的数据结构变成下图的表结构

 

select c_empid, sum(CASE WHEN dp.c_name='基本工资一岗位月度工资' THEN nvl(s.c_value, 0)  END)as "岗位月度工资",
          sum(CASE WHEN dp.c_name='基本工资一加班费' THEN nvl(s.c_value, 0) END)as "加班费",
          sum(CASE WHEN dp.c_name='基本工资一基础工资' THEN nvl(s.c_value, 0) END)as "基础工资"
           from tb_cnb_otherpays_component dp
     left join (select C_OID,C_COMPENTID,C_GROUPID,C_YEAR,C_MONTH,C_VALUE,C_OPERATORID,C_OPERATETIME,C_EMPID,C_STATUS
                  from tb_cnb_otherpays_details ds
                 where ds.c_year = 2014
                   AND DS.C_GROUPID = 156075017
                   AND DS.C_MONTH = 5
                   and ds.c_empid in(21279974)
                   ) s
       on dp.c_oid = s.c_compentid 
       group by s.c_empid;



第三种   把多行转成一列


 
select id, vnum, to_char(wmsys.wm_concat(vname)) c 
from tab_test group by 
id,vnum;

第四种   把一列转成多行

 
with a as (select '/ABC/AA/AD/ABD/JI/CC/ALSKD/ALDKDJ' id from dual)
select 
regexp_substr(id,'[^/]+',1,rownum) id from a
connect by rownum <= 
length(regexp_replace(id,'[^/]+'))

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值