oracle纵向变成横向,纵向排列怎么改成横向的?

SQL code--横列转换

create table TTbl1 as

select 2000 nyear,'王五' sname,'2w' sSalary from dual

union select 2000,'马三','3w' from dual

union select 2001,'王五','4w' from dual

union select 2001,'马三','6w' from dual;

declare

cursor c1 is

select nyear,avg(case when instr(sSalary,'w')>0 then To_number(substr(sSalary,1,instr(sSalary,'w')-1)) else 0 end) as sSalary1

from ttbl1

group by nyear

order by nyear asc;

sSql varchar2(2000);

sSql1 varchar2(2000);

sSql2 varchar2(2000);

icount number;

c2 c1%rowtype;

vTbl varchar2(20);

function CheckTableExist(NewTableName varchar2) return integer as

v_Count integer;

begin

select count(*) into v_Count from user_tables where

upper(trim(table_name))=upper(trim(NewTableName));

if v_Count=0 then

return 0;

else

return 1;

end if;

exception

when others then

return 0;

end;

begin

sSql := 'create table TmpTbl1(';

sSql1 := 'insert into TmpTbl1';

sSql2 := ' select ';

icount := 0;

open c1;

loop

fetch c1 into c2;

exit when c1%notfound;

icount := icount+1;

if iCount = 1 then

sSql := sSql||'y'||c2.nyear||' varchar2(20)';

sSql2 := sSql2||c2.sSalary1;

else

sSql := sSql||',y'||c2.nyear||' varchar2(20)';

sSql2 := sSql2||','||c2.sSalary1;

end if;

end loop;

close c1;

sSql := sSql||')';

sSql2 := sSql1||' '||sSql2||' from dual';

vTbl := 'TmpTbl1';

if CheckTableExist(vTbl) = 1 then

execute immediate 'drop table '||vTbl;

end if;

execute immediate sSql;

execute immediate sSql2;

commit;

end;

select * from TmpTbl1;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值