日期:2014-05-18  浏览次数:20495 次

菜鸟问题:数据更新?
SQL code


--问题在下面第(3)部分标志了,即:第(3)部分这段更新代码,自己写的比较笨拙,大侠们能否给出更好的想法?

--因为实际中,还有大概十几个这样的列需要更新后再插入(这里只给出了NumIDs和Trans两列),自己写的这段硬编码,
--实际中不太可行,总不能一个一个这样手写吧?还容易出错。
--可操作性不好。。


--(1)部分测试数据
--原表
create table temp_1(ID int,NumIDs varchar(50),BuckID int,Trans varchar(50)) 
        
insert into  temp_1 values (762943 ,'(C) 20  - 52'       ,4,    '(D) 308  - 550,837') 
insert into  temp_1 values (762389    ,'(B) 8  - 20 '       ,4,    '(D) 308  - 550,837')
insert into  temp_1 values (762286    ,'(D) 52  - 77,885'  ,3,    '(C) 154  - 308 ')
insert into  temp_1 values (762164    ,'(A) 0  - 8 '       ,2,    '(B) 84  - 154 ')
insert into  temp_1 values (761637    ,'(A) 0  - 8 '       ,3,    '(C) 154  - 308 ')
insert into  temp_1 values (761357    ,'(D) 52  - 77,885'  ,4,    '(D) 308  - 550,837') 
insert into  temp_1 values (761213    ,'(A) 0  - 8 '       ,3,    '(C) 154  - 308 ')
insert into  temp_1 values (760836    ,'(B) 8  - 20 '       ,4,    '(D) 308  - 550,837') 
insert into  temp_1 values (760337    ,'(B) 8  - 20 '       ,2,    '(B) 84  - 154 ')
insert into  temp_1 values (54     ,'(B) 8  - 20 '      ,4,    '(A) 0  - 84') 
go

--(2)追加到原表temp_1中的数据
--新表temp_2
create table temp_2(ID int,NumIDs varchar(50),BuckID int,Trans varchar(50))
insert into  temp_2 values (4467 ,'(C) 20  - 50'    ,4,    '(D) 400  - 590,000') 
insert into  temp_2 values (5533 ,'(B) 15  - 20 '     ,4,    '(D) 400  - 590,000')
insert into  temp_2 values (76    '(D) 50  - 80,885'  ,3,    '(C) 150  - 400 ')
insert into  temp_2 values (164  ,'(A) 0  - 15 '    ,2,    '(B) 30  - 150 ')
insert into  temp_2 values (637  ,'(A) 0  - 15 '    ,3,    '(A) 0  - 30 ')
go


--(3)如下是:需要重写代码的部分
--要求是:将temp_2中的两列NumIDs和Trans取值,更新为temp_1中NumIDs和Trans的取值,再追加到temp_1中。

update temp_2
set NumIDs=case NumIDs when '(A) 0  - 15 ' then '(A) 0  - 8 '
                       when '(B) 15  - 20 ' then '(B) 8  - 20 '
                       when '(C) 20  - 50' then '(C) 20  - 52'
                       when '(D) 50  - 80,885' then '(D) 52  - 77,885'
                       end,
    Trans=case Trans   when '(A) 0  - 30 ' then '(A) 0  - 84'
                       when '(B) 30  - 150 ' then '(B) 84  - 154 '
                       when '(C) 150  - 400' then '(C) 154  - 308 '
                       when '(D) 400  - 590,000' then '(D) 308  - 550,837'
                       end;
                       
insert into temp_1 select * from temp_2
select * from temp_1 order by Trans




------解决方案--------------------
SQL code

--1楼写差了,是这个

create table temp_1(ID int,NumIDs varchar(50),BuckID int,Trans varchar(50)) 
        
insert into  temp_1 values (762943 ,'(C) 20  - 52'       ,4,    '(D) 308  - 550,837') 
insert into  temp_1 values (762389    ,'(B) 8  - 20 '       ,4,    '(D) 308  - 550,837')
insert into  temp_1 values (762286    ,'(D) 52  - 77,885'  ,3,    '(C) 154  - 308 ')
insert into  temp_1 values (762164    ,'(A) 0  - 8 '       ,2,    '(B) 84  - 154 ')
insert into  temp_1 values (761637    ,'(A) 0  - 8 '       ,3,    '(C) 154  - 308 ')
insert into  temp_1 values (761357    ,'(D) 52  - 77,885'  ,4,    '(D) 308  - 550,837') 
insert into  temp_1 values (761213    ,'(A) 0  - 8 '       ,3,    '(C) 154  - 308 ')
insert into  temp_1 values (760836    ,'(B) 8  - 20 '       ,4,    '(D) 308  - 550,837') 
insert into  temp_1 values (760337    ,'(B) 8  - 20 '       ,2,    '(B) 84  - 154 ')
insert into  temp_1 values (54     ,'(B) 8  - 20 '      ,4,    '(A) 0  - 84') 
go

--(2)追加到原表temp_1中的数据
--新表temp_2
create table temp_2(ID int,NumIDs varchar(50),BuckID int,Trans varchar(50))
insert into  temp_2 values (4467 ,'(C) 20  - 50'    ,4,    '(D) 400  - 590,000') 
insert into  temp_2 values (5533 ,'(B) 15  - 20 '     ,4,    '(D) 400  - 590,000')
insert into  temp_2 values (76   ,'(D) 50  - 80,885'  ,3,    '(C)