【问题标题】:INSERT INTO SELECT CASE插入选择案例
【发布时间】:2012-11-07 06:38:37
【问题描述】:

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

Processes 表:

Process_ID
Variable_ID
Value_ID - (Set_To_Value_ID 在这里)
Manual_Value - (@987654345 @, Changed_In_SP 或 Comment_Input 在这里)

Variable_ID_To_Change 转到Variable_ID。

如何进行?
谢谢。

【问题讨论】:

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


    【解决方案1】:

    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 
    

    【讨论】:

    • 谢谢,不过我不能使用 COALESCE。原因是根据选择的列,一些其他值(来自完全不同的表)可能会进入 Manual_Value 字段。我想实现 SELECT CASE 方法,这样我就可以明确地决定该领域的内容。
    猜你喜欢
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 2011-01-23
    • 1970-01-01
    • 2010-12-26
    • 2011-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多