如果另一列为空,则选择一列

Posted

技术标签:

【中文标题】如果另一列为空,则选择一列【英文标题】:Select a column if other column is null 【发布时间】:2012-03-26 19:35:28 【问题描述】:

我需要从表中选择一个名为 ProgramID 的字段,如果 ProgramID 为 NULL,那么我需要从同一个表中选择 InterimProgramID 中的值并将其别名为 ProgramID。

如何创建条件 SELECT 语句来执行此操作?

【问题讨论】:

【参考方案1】:

你需要 ISNULL 函数。

SELECT ISNULL(a, b)

如果a 为空,则选择b

此外,您可以使用 WHEN/THEN 选择选项,在 BOL 中查找。本质上:它的 c switch/case 块符合 SQL。

【讨论】:

mysql 等价于 IFNULL dev.mysql.com/doc/refman/5.7/en/… 和它的a || bjavascript PostgreSQL 等效值为 NULLIF postgresql.org/docs/current/… 我的意思是这个问题被严格标记为 tsql【参考方案2】:

您可以使用ISNULL 函数或COALESCE 函数。他们都做几乎相同的事情,但是ISNULL 只接受两个参数,COALESCE 接受多个参数(返回它遇到的第一个非 null)。两者都尝试第一个参数,然后是第二个,(并且 COALESCE 继续)

DECLARE @IAMNULL VARCHAR
DECLARE @IAMNOTNULL VARCHAR
SET @IAMNOTNULL = 'NOT NULL'

SELECT ISNULL(@IAMNULL, @IAMNOTNULL)
--Output: 'NOT NULL'

DECLARE @IAMNULLALSO VARCHAR

SELECT COALESCE(@IAMNULL, @IAMNULLALSO, @IAMNOTNULL)
--Output: 'NOT NULL'

【讨论】:

【参考方案3】:
  select COALESCE ( ProgramID , InterimProgramID ) as 'ProgramID' 

【讨论】:

这个解决方案似乎最好地回答了这个问题【参考方案4】:
SELECT ProgramID
  FROM a_table
 WHERE ProgramID IS NOT NULL
UNION
SELECT InterimProgramID AS ProgramID
  FROM a_table
 WHERE ProgramID IS NULL;

【讨论】:

【参考方案5】:

还有:

Select NVL(Column_A, Column_B) From 'schema'.'table_name'

NVL( ) 函数在 Oracle 中可用,在 MySQL 或 SQL Server 中不可用。此函数用于将 NULL 值替换为另一个值。类似于 MySQL 中的 IFNULL 函数和 SQL Server 中的 ISNULL 函数。

https://www.1keydata.com/sql/sql-nvl.html

【讨论】:

【参考方案6】:

Coalesce('zzz-' + ProgramID, InterimID) as programID 仍然会忽略 ProgramID,即使您有一个借口值。这是一个很酷的小功能

【讨论】:

【参考方案7】:

你也可以使用IFNULL函数

select IFNULL(ProgramId,interimId) as ProgramId

【讨论】:

这个问题是关于 SQL Server 的,IFNULL 与那个 DBMS 不存在,只有ISNULL

以上是关于如果另一列为空,则选择一列的主要内容,如果未能解决你的问题,请参考以下文章

Slick - 如果列为空,则过滤行

SQL - 如果列为空,则列出所有数据

如果 Oracle OBIEE 中的列为空,则隐藏数据透视表中的列

ms 访问 - 当我在 vba 中选择查询时,列为空

如果一个表列为空,如何从另一个表中获取值

MySQL:选择列为空的行