2012-11-19 318 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 - 查看我的编辑。 –