2013-06-18 49 views
-1

我想寫一個SQL腳本來遷移一些數據。想象一下這樣的情況:更改INSERT語句中的選定值

表遷移:

OLDTABLE 
--------------- 
ID VALUE  OLDVALUE 
1  A   A 
2  B   B 

預期目標狀態

NEWTABLE 
--------------- 
ID VALUE  NEWVALUE 
1  A   Y 
2  B   Z 

我至今是:

INSERT INTO NEWTABLE (ID, VALUE, NEWVALUE) 
SELECT 
    ID, 
    VALUE, 
    OLDVALUE 
FROM OLDTABLE; 

我的問題是我怎麼能修改在將其插入NEWTABLE.NEWVALUE之前從OLDTABLE.OLDVALUE中選擇的值Ø它爲Y每一個A和Z爲每B.

回答

1

好老CASE expression

INSERT INTO NEWTABLE (ID, VALUE, NEWVALUE) 
SELECT 
    ID, 
    VALUE, 
    CASE OLDVALUE 
     WHEN 'A' THEN 'Y' 
     WHEN 'B' THEN 'Z' 
     ELSE OLDVALUE 
    END 
FROM OLDTABLE; 

(我假設,如果它不是AB,應該保持不變)

+0

謝謝!我會盡快接受這個答案(時間限制),因爲你比okrumnow快一點。 –

+1

@安德烈 - 我們的答案略有不同。我正在使用簡單案例表達式,okrumnow正在使用搜索案例表達式。你可以通過我提供的鏈接瞭解它們和它們之間的差異。 –

+0

但是它們在結果數據中沒有差異,是嗎? – okrumnow

1

試試這個:

INSERT INTO NEWTABLE (ID, VALUE, NEWVALUE) 
SELECT ID, VALUE, 
    CASE WHEN OLDVALUE = 'A' THEN 'Y' 
     WHEN OLDVALUE = 'B' THEN 'Z' 
     ELSE 'NOT FOUND' -- handle NOT FOUND case here 
    END AS NEWVALUE 
FROM OLDTABLE