INSERT INTO SELECT CASE

insert, select, select-case, sql, sql-server

Solution

Value_ID - ( Set_To_Value_ID goes here ) Manual_Value

Set_To_Variable_ID, Changed_In_SP OR Comment_Input goes here )

You can use the `COALESCE` expression like so:

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

Update: Well, since you couldn't use the `COALESCE` for this, here is the canonical way to do that using the `CASE` expression:

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 

Problem

I have two tables, `Variables` and `Processes`. I want to implement a `INSERT INTO SELECT CASE`, but I've never done this before. Data goes from `Variables` to `Processes` always. But I don't know what columns. For example : `Variables` table has the columns below : `Variable_ID` `Set_To_Value_ID` `Set_To_Variable_ID` `Changed_In_SP` `Comment_Input` The first column is always copied to the `Processes` table. `Set_To_Value_ID`, `Set_To_Variable_ID`, `Changed_In_SP`, `Comment_Input` need a `SELECT CASE` because only one can have a value. three of these columns in a row will always be null. Whatever column is not null should be inserted in the `Processes` table : `Processes` table : `Process_ID` `Variable_ID` `Value_ID` - ( `Set_To_Value_ID` goes here ) `Manual_Value` - ( `Set_To_Variable_ID`, `Changed_In_SP` OR `Comment_Input` goes here ) `Variable_ID_To_Change` goes to `Variable_ID`. How to proceed? Thank you.

Original source