如果其他列为null,请选择一列

时间:2012-03-26 19:35:29

标签: sql sql-server tsql

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

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

7 个答案:

答案 0 :(得分:75)

您需要ISNULL /函数运算符。

Select ISNULL(a, b)
如果b为空,

a会被选中。

此外,您可以使用WHEN / THEN选项,在BOL中查找。基本上:它的c开关/案例块符合SQL。

答案 1 :(得分:16)

您可以使用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'

答案 2 :(得分:7)

  select COALESCE ( ProgramID , InterimProgramID ) as 'ProgramID' 

答案 3 :(得分:1)

SELECT ProgramID
  FROM a_table
 WHERE ProgramID IS NOT NULL
UNION
SELECT InterimProgramID AS ProgramID
  FROM a_table
 WHERE ProgramID IS NULL;

答案 4 :(得分:1)

还有:

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

答案 5 :(得分:0)

您也可以使用IFNULL功能

select IFNULL(ProgramId,interimId) as ProgramId

答案 6 :(得分:0)

Coalesce('zzz-'+ ProgramID,InterimID)作为programID仍然会忽略ProgramID,即使你有一个pretext值。这是一个很酷的小功能