COALESCE (Transact-SQL)
Retourne la première expression non NULL parmi ses arguments.
Conventions de la syntaxe de Transact-SQL
Syntaxe
COALESCE ( expression [ ,...n ] )
Arguments
- expression
Expression de tout type.
Notes
Si tous les arguments sont NULL, COALESCE retourne la valeur NULL.
Remarque : |
---|
Au moins une des valeurs NULL doit être de type NULL. |
La fonction COALESCE(expression1**,**...n) est équivalente à cette fonction CASE :
CASE
WHEN (expression1 IS NOT NULL) THEN expression1
...
WHEN (expressionN IS NOT NULL) THEN expressionN
ELSE NULL
END
ISNULL et COALESCE, bien qu'ils soient équivalents, peuvent se comporter différemment. Une expression qui comprend ISNULL et des paramètres non NULL est considérée NOT NULL, tandis que les expressions comprenant COALESCE et des paramètres non NULL sont considérées NULL. Dans SQL Server, pour indexer des expressions comprenant COALESCE et des paramètres non NULL, la colonne calculée peut être conservée à l'aide de l'attribut de colonne PERSISTED comme dans l'instruction suivante :
CREATE TABLE #CheckSumTest
(
ID int identity ,
Num int DEFAULT ( RAND() * 100 ) ,
RowCheckSum AS COALESCE( CHECKSUM( id , num ) , 0 ) PERSISTED PRIMARY KEY
)
Types de retour
Retourne le type de données de expression dont la priorité de type de données est la plus élevée.
Exemple
Dans l'exemple suivant, la table wages
comporte trois colonnes d'informations sur les salaires annuels des employés : salaire horaire, salaire et commissions. Cependant, chaque employé ne perçoit qu'un seul type de salaire. Pour déterminer le montant total versé à tous les employés, la fonction COALESCE
permet de retourner seulement les valeurs non NULL trouvées dans les colonnes hourly_wage
, salary
et 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
Voici l'ensemble des résultats.
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)
Voir aussi
Référence
CASE (Transact-SQL)
ISNULL (Transact-SQL)
Fonctions système (Transact-SQL)