2012-11-19 71 views
2

我有兩個表,VariablesProcesses
我想實現一個INSERT INTO SELECT CASE,但我從來沒有這樣做過。INSERT INTO SELECT CASE

數據總是從Variables變爲Processes。 但我不知道什麼專欄。

例如:

Variables表具有以下的列:

Variable_ID
Set_To_Value_ID
Set_To_Variable_ID
Changed_In_SP
Comment_Input

第一列總是被複制到Processes表。
Set_To_Value_ID,Set_To_Variable_ID,Changed_In_SP, Comment_Input需要一個SELECT CASE,因爲只有一個可以有一個值。連續排列的三列將始終爲空。無論列不爲空,應插入Processes表:

Processes表:

Process_ID
Variable_ID
Value_ID - (Set_To_Value_ID放在這裏)
Manual_Value - (Set_To_Variable_IDChanged_In_SPORComment_Input轉到此處)

Variable_ID_To_Change轉到Variable_ID

如何繼續?
謝謝。

回答

3

Value_ID - (Set_To_Value_ID放在這裏)Manual_Value

Set_To_Variable_ID,Changed_In_SP或Comment_Input放在這裏)

可以使用COALESCE表情就像這樣:

INSERT INTO Processes 
SELECT 
    Set_To_Value_ID, 
    COALESCE(Set_To_Variable_ID, Changed_In_SP, Comment_Input) 
FROM Variables 

更新:那麼,因爲你不能使用COALESCE爲此,這裏是做,使用CASE表達的正規途徑:

INSERT INTO Processes 
SELECT 
    Set_To_Value_ID, 
    CASE 
    WHEN Set_To_Variable_ID IS NOT NULL THEN Set_To_Variable_ID 
    WHEN Changed_In_SP IS NOT NULL THEN Changed_In_SP 
    WHEN Comment_Input IS NOT NULL THEN Comment_Input 
    END 
FROM Variables 
+0

謝謝,我不能使用COALESCE雖然。原因是,根據所選的列,其他值(來自完全不同的表格)可能會進入Manual_Value字段。我想實現SELECT CASE方法,所以我可以明確地決定在該領域發生了什麼。 – hermann

+0

@hermann - 查看我的編輯。 –