【问题标题】:Replace Value in Column with Value in Different Column用不同列中的值替换列中的值
【发布时间】:2018-04-13 12:14:13
【问题描述】:

我有一个在 SQL 中看起来像这样的数据集。

Col1     Col2     Col3     
   A        4        1
   B        5     NULL 
   C        6        1
   D        7     NULL
   E        8     NULL

如果 Col3 = 1,我如何使用 Col2 中的值和 Col3 中的值添加新列,否则将现有值保留在 Col2 中。

最终预期输出:

Col1     Col2     Col3     Col4     
   A        4        1        1
   B        5     NULL        5
   C        6        1        1
   D        7     NULL        7
   E        8     NULL        8

我尝试了合并功能,但我认为它不起作用:

SELECT 
Col1, 
Col2, 
Col3,
coalesce(Col3, Col2) AS Col4
FROM table1

【问题讨论】:

  • 用您正在使用的数据库标记您的问题。 COALESCE() 应该做你想做的。
  • 左对齐 SQL 很难阅读。正确的格式让一切变得更容易。
  • 应该是:coalesce(Col3, Col2)
  • 谢谢我就是这么写的

标签: sql if-statement replace coalesce aginity


【解决方案1】:

您的描述建议使用case 表达式:

select . . . 
       (case when col3 = 1 then col3 else col2 end) as col4

你也可以把上面写成

select . . . 
       (case when col3 = 1 then 1 else col2 end) as col4

对于您提供的数据,coalesce() 也应该有效。

【讨论】:

  • 谢谢,我会在几个小时内试试这个,然后告诉你!这看起来应该可以工作,感谢帮助
  • 在我的例子中,看起来我在使用合并对吗?
  • @NickKnauer 。 . .是的。您使用正确。
【解决方案2】:

试试这个:

SELECT 
    Col1, 
    Col2, 
    Col3,
    CASE WHEN Col3 IS NOT NULL THEN Col3 ELSE Col2 END AS Col4
FROM table1

【讨论】:

    【解决方案3】:
    -- this should do what you want
    SELECT 
    Col1, 
    Col2, 
    Col3,
    CASE WHEN Col3 = 1 THEN Col3 ELSE Col2 END AS NewCOL
    FROM table1
    

    【讨论】:

      【解决方案4】:
      Insert into table2
      select 
      Col1, 
      Col2, 
      Col3, 
      (case when col3 = 1 then 1 else col2 end) as col4
      FROM table1
      

      【讨论】:

      • 稍微详细说明一下为什么这样做可以帮助未来遇到相同问题的人理解解决方案。
      猜你喜欢
      • 2015-06-30
      • 1970-01-01
      • 1970-01-01
      • 2022-11-02
      • 2020-08-04
      • 2018-11-17
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      相关资源
      最近更新 更多