根据一个表创建另一个表

今天在群里有一个人问一个问题就是根据一个表生成另一个表,我想我刚学pl/sql就想用pl/sql写出来练练手
表t  有两个字段(a varchar2(2),b number(2,2)) 里面有数据是(A,1)(B,1)(C,1)(D,2)(E,2) 要生成表的数据是(A,1001)(B,1002)(C,1003)(D,2001)(E,2002)由于我刚学pl/sql学的仅仅是声明变量和循环一块对rank()函数over()函数都还不知道于是我就想创建新表扫描老表的内容插入进去实现过程代买如下:
declare
k int:=1000;
j int:=2000;
begin
execute immediate'create table t2 as select * from t';
for i in (select a,b from t) loop
case i.b
   when  1 then
           k :=k + 1;
execute immediate'update t2 set b=:1 where a=:2' using  k, i.a;
   when 2 then
        j :=j+ 1;
execute immediate'update t2 set b=:1 where a=:2' using  j, i.a;
end case;
end loop;
end;
写了半天总算出来了,后来看别人的语句就一个查询实现了:
select a,b*1000+rank from ( select t.a,t.b,rank() over(partion by t.b order by a) rank from  t);
原来可以有这么简单的方法可以实现。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/27668565/viewspace-751192/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/27668565/viewspace-751192/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值