COALESCE (Transact-SQL)

Devuelve la primera expresión distinta de NULL entre sus argumentos.

Icono de vínculo a temasConvenciones de sintaxis de Transact-SQL

Sintaxis

COALESCE ( expression [ ,...n ] ) 

Argumentos

Tipos de valor devueltos

Devuelve el tipo de datos de expression con la precedencia de tipo de datos más alta.

Notas

Si todos los argumentos son NULL, COALESCE devuelve NULL.

[!NOTA] Al menos uno de los valores NULL debe ser NULL con tipo.

COALESCE(expression1**,**...n) es equivalente a esta función CASE:

CASE
   WHEN (expression1 IS NOT NULL) THEN expression1
   ...
   WHEN (expressionN IS NOT NULL) THEN expressionN
   ELSE NULL
END

ISNULL y COALESCE, aunque son equivalentes, pueden comportarse de forma diferente. Una expresión que contenga ISNULL con parámetros diferentes de NULL se considera que es NOT NULL, mientras que las expresiones que contienen COALESCE con parámetros que son diferentes de NULL se consideran NULL. En SQL Server, para indizar las expresiones que contienen COALESCE con parámetros distintos de NULL, la columna calculada puede perdurar si se usa el atributo de columna PERSISTED como en la instrucción siguiente:

CREATE TABLE #CheckSumTest 
(
        ID int identity ,
        Num int DEFAULT ( RAND() * 100 ) ,
        RowCheckSum AS COALESCE( CHECKSUM( id , num ) , 0 ) PERSISTED PRIMARY KEY
)

Ejemplos

En este ejemplo, la tabla wages incluye tres columnas con información acerca del sueldo anual de los empleados: la tarifa por hora, el salario y la comisión. No obstante, un empleado recibe sólo un tipo de sueldo. Para determinar el importe total pagado a todos los empleados, utilice la función COALESCE para obtener sólo los valores no NULL encontrados en hourly_wage, salary y commission.

SET NOCOUNT ON;
GO
USE master;
IF EXISTS (SELECT name FROM sys.tables
      WHERE name = 'wages')
   DROP TABLE wages;
GO
CREATE TABLE wages
(
   emp_id      tinyint    identity,
   hourly_wage   decimal   NULL,
   salary      decimal    NULL,
   commission   decimal   NULL,
   num_sales   tinyint   NULL
);
GO
INSERT wages VALUES(10.00, NULL, NULL, NULL);
INSERT wages VALUES(20.00, NULL, NULL, NULL);
INSERT wages VALUES(30.00, NULL, NULL, NULL);
INSERT wages VALUES(40.00, NULL, NULL, NULL);
INSERT wages VALUES(NULL, 10000.00, NULL, NULL);
INSERT wages VALUES(NULL, 20000.00, NULL, NULL);
INSERT wages VALUES(NULL, 30000.00, NULL, NULL);
INSERT wages VALUES(NULL, 40000.00, NULL, NULL);
INSERT wages VALUES(NULL, NULL, 15000, 3);
INSERT wages VALUES(NULL, NULL, 25000, 2);
INSERT wages VALUES(NULL, NULL, 20000, 6);
INSERT wages VALUES(NULL, NULL, 14000, 4);
GO
SET NOCOUNT OFF;
GO
SELECT CAST(COALESCE(hourly_wage * 40 * 52, 
   salary, 
   commission * num_sales) AS money) AS 'Total Salary' 
FROM wages;
GO

Éste es el conjunto de resultados.

Total Salary 
------------ 
20800.0000
41600.0000
62400.0000
83200.0000
10000.0000
20000.0000
30000.0000
40000.0000
45000.0000
50000.0000
120000.0000
56000.0000

(12 row(s) affected)

Vea también

Referencia

CASE (Transact-SQL)
ISNULL (Transact-SQL)
Funciones del sistema (Transact-SQL)

Ayuda e información

Obtener ayuda sobre SQL Server 2005