插入选择案例

时间:2012-11-19 10:42:42

标签: sql sql-server select insert select-case

我有两张表,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_IDSet_To_Variable_IDChanged_In_SPComment_Input需要SELECT CASE,因为只有一个人可以拥有价值。连续的这三列中的三列将始终为null。如果列不为null,则应在Processes表中插入:

Processes表:

Process_ID
Variable_ID
Value_ID - (Set_To_Value_ID到此处)
Manual_Value - (Set_To_Variable_IDChanged_In_SP Comment_Input来到这里)

Variable_ID_To_Change转到Variable_ID

如何进行?
谢谢。

1 个答案:

答案 0 :(得分: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