行转列,列转行

第二种方法
  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,'[^/]+'))

 

 

猜你喜欢

转载自625454856a.iteye.com/blog/1974377