插入选择案例

her*_*ann 4 sql sql-server select insert select-case

我有两张桌子,Variables并且Processes
我想实现一个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需要 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_Change前往Variable_ID

如何进行?
谢谢。

Mah*_*mal 6

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 
Run Code Online (Sandbox Code Playgroud)

更新:嗯,因为您不能使用 来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 
Run Code Online (Sandbox Code Playgroud)