Freigeben über


COALESCE (Transact-SQL)

Gibt den ersten Ausdruck ungleich NULL an die Argumente des Ausdrucks zurück.

Themenlink (Symbol)Transact-SQL-Syntaxkonventionen

Syntax

COALESCE ( expression [ ,...n ] ) 

Argumente

  • expression
    Ein Ausdruck eines beliebigen Typs.

Rückgabetypen

Gibt den Datentyp von expression zurück, der in der Datentyp-Rangfolge am höchsten steht.

Hinweise

Sind alle Argumente NULL, gibt COALESCE NULL zurück.

ms190349.note(de-de,SQL.90).gifHinweis:
Mindestens einer der NULL-Werte muss ein typisierter NULL-Wert sein.

COALESCE(expression1**,**...n) ist mit der folgenden CASE-Funktion gleichbedeutend:

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

ISNULL und COALESCE entsprechen zwar einander, sie können jedoch ein unterschiedliches Verhalten aufweisen. Ein Ausdruck unter Beteiligung von ISNULL mit Parametern ungleich NULL wird als NOT NULL behandelt, während Ausdrücke unter Beteiligung von COALESCE mit Parametern ungleich NULL als NULL behandelt werden. In SQL Server kann zum Indizieren von Ausdrücken unter Beteiligung von COALESCE mit Parametern ungleich NULL die berechnete Spalte wie in der folgenden Anweisung mithilfe des PERSISTED-Spaltenattributs beibehalten werden:

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

Beispiele

Im folgenden Beispiel enthält die wages-Tabelle drei Spalten mit Informationen zu den Jahresgehältern der Angestellten: den Stundenlohn, das Gehalt und die Kommission. Allerdings wird ein Angestellter nur nach einem dieser Gehaltstypen bezahlt. Um die Gesamtsumme aller Auszahlungen an die Angestellten zu bestimmen, verwenden Sie die COALESCE-Funktion, damit Sie nur die Werte ungleich NULL in den Spalten hourly_wage, salary und commission erhalten.

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

Dies ist das Resultset.

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)

Siehe auch

Verweis

CASE (Transact-SQL)
ISNULL (Transact-SQL)
Systemfunktionen (Transact-SQL)

Hilfe und Informationen

Informationsquellen für SQL Server 2005