【问题标题】:Return one of two columns in a view - whichever one is not null返回视图中的两列之一 - 无论哪一列不为空
【发布时间】:2011-03-04 21:16:56
【问题描述】:

我有一个三列的表:

ColumnA          ColumnB         ColumnC
AAA               NULL            123
BBB               222             NULL
CCC               NULL            NULL

我想创建一个 SELECT 语句,它将返回 ColumnA,然后是第二个列,它要么显示 ColumnB 的值,除非 ColumnB 为空;否则它会显示 ColumnC 的值,即使它是 NULL。我可以为此使用 IF 语句吗?比如:

SELECT ColumnA, 
IF(ColumnB IS NULL, ColumnC, ColumnB)
FROM table

**如果我得到这个工作,下一步是返回连接列的值而不是 ColumnB。实际上,IF 语句将是

IF(table.ColumnB IS NULL, table.ColumnC, table2.ColumnD)

【问题讨论】:

  • @JNK 这是 SQL Server 9.0 版

标签: sql sql-server sql-server-2005


【解决方案1】:

使用COALESCE

SELECT ColumnA, COALESCE(ColumnB, ColumnC) as 'Value'

【讨论】:

  • COALESCE 是 ANSI,并且受 MySQL 4+、Oracle 9i+、SQL Server 2000+ 支持。非常安全的赌注
  • 效果很好,谢谢!但是我将它授予@Martin,因为他的解决方案也解决了下一步问题。
【解决方案2】:

读到你问题的结尾,听起来你需要使用CASE

CASE WHEN table.ColumnB IS NULL 
     THEN table.ColumnC 
     ELSE table2.ColumnD 
END AS Whatever

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-14
    • 1970-01-01
    • 1970-01-01
    • 2022-12-09
    • 2011-01-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多