我需要从表中选择一个名为ProgramID的字段,如果ProgramID为NULL,那么我需要从同一个表中选择InterimProgramID中的值,并将其别名为ProgramID。
如何创建条件SELECT语句来执行此操作?
答案 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函数。
答案 5 :(得分:0)
您也可以使用IFNULL功能
select IFNULL(ProgramId,interimId) as ProgramId
答案 6 :(得分:0)
Coalesce('zzz-'+ ProgramID,InterimID)作为programID仍然会忽略ProgramID,即使你有一个pretext值。这是一个很酷的小功能