3

我有两张桌子,VariablesProcesses
我想实现一个INSERT INTO SELECT CASE,但我以前从未这样做过。

数据从VariablesProcesses永远。但我不知道是什么列。

例如 :

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需要 aSELECT CASE因为只有一个可以有值。一行中的三列将始终为空。任何不为空的列都应插入Processes表中:

Processes桌子 :

Process_ID
Variable_ID
Value_ID- (Set_To_Value_ID到这里 )
Manual_Value- ( Set_To_Variable_ID, Changed_In_SP OR Comment_Input到这里 )

Variable_ID_To_ChangeVariable_ID

如何进行?
谢谢你。

4

1 回答 1

4

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 
于 2012-11-19T10:48:55.933 回答