2012-03-26 26 views
28

Necesito seleccionar un campo llamado ProgramID de una tabla y si el ProgramID es NULL, entonces necesito seleccionar el valor en el InterimProgramID de la misma tabla y alias como ProgramID.Seleccione una columna si la otra columna es nula

¿Cómo puedo hacer una instrucción SELECT condicional para hacer esto?

Respuesta

52

Necesita el operador ISNULL/function.

Select ISNULL(a, b) 

b es seleccionado si a es nulo.

Además, puede usar la opción de selección WHEN/THEN, buscar en BOL. Esencialmente: su conmutador c/bloque de caja cumple con SQL.

+3

MySQL equivalente es IFNULL https://dev.mysql.com/doc/refman/5.7/en/control-flow-functions.html#function_ifnull – giorgio79

+0

y es 'a || b' en javascript –

13

Puede usar la función ISNULL o la función COALESCE. Ambos hacen prácticamente lo mismo, sin embargo, ISNULL solo toma dos parámetros y COALESCE toma múltiples parámetros (devolviendo el primer no nulo que encuentra). Ambos tratan el primer parámetro, entonces el segundo, (y se unen continúa en)

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' 
+1

COALESCE es genial. –

5
select COALESCE (ProgramID , InterimProgramID) as 'ProgramID' 
1
SELECT ProgramID 
    FROM a_table 
WHERE ProgramID IS NOT NULL 
UNION 
SELECT InterimProgramID AS ProgramID 
    FROM a_table 
WHERE ProgramID IS NULL; 
1

También puede utilizar la función IFNULL

select IFNULL(ProgramId,interimId) as ProgramId 
+2

Esta pregunta es sobre SQL Server y 'IFNULL' no existe con ese DBMS, solo' ISNULL' – dominicbri7

0

Coalesce ('zzz-' + ProgramID , InterimID) como programID aún ignorará el ID del programa, incluso si tiene un valor de pretexto. Es una pequeña y genial función

Cuestiones relacionadas