Udostępnij za pośrednictwem


COALESCE (Transact-SQL)

Zwraca pierwsze wyrażenie niepustych między jej argumentów.

Topic link iconKonwencje składni języka Transact-SQL

COALESCE ( expression [ ,...n ] ) 

Argumenty

Zwracane typy

Zwraca typ danych expression o najwyższym priorytecie typu danych. Jeżeli wszystkie wyrażenia nonnullable, wynik zostanie wpisany jako nonnullable.

Remarks

Jeśli wszystkie argumenty mają wartość NULL, ŁĄCZONEJ zwraca wartość NULL.

Uwaga

Co najmniej jedną z wartości null muszą być wpisane wartości NULL.

POŁĄCZENIE)expression1,... n) is equivalent to the following CASE expression:

przypadek

   GDY (wyrażenie1 IS NOT NULL) wyrażenie1 THEN

   GDY (wyrażenie2 IS NOT NULL) THEN wyrażenie2

   ...

   ELSE expressionN

Projekt można skojarzyć z więcej niż jedno rozwiązanie.

ISNULL i ŁĄCZONEJ jakby, może działają inaczej.Wyrażenie obejmujących ISNULL z parametrami inne niż null jest traktowana jako nie wartość NULL, podczas wyrażenia dotyczące ŁĄCZONEJ z parametrami inne niż null jest traktowana jako wartość null.W SQL Server, aby indeksu wyrażenia dotyczące ŁĄCZONEJ z parametrami inne niż null, kolumna obliczana może być utrwalone przy użyciu atrybut PERSISTED kolumny zgodnie z następującą instrukcję:

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

Przykłady

Prosty przykład

Poniższy przykład ilustruje, jak ŁĄCZONEJ zaznaczyć dane z pierwszej kolumna, która ma wartość niezerową.

USE AdventureWorks ;

GO

SELECT Name, Class, Color, ProductNumber,

COALESCE(Class, Color, ProductNumber) AS FirstNotNull

FROM Production.Product ;

GO

Przykład złożony

W poniższym przykładzie wages Tabela zawiera trzy kolumny z informacjami o rocznym płac pracowników: godzinową, wynagrodzenia i prowizji. Jednak pracownik otrzymuje tylko jeden typ płatności.Aby określić całkowitą kwotę zapłaconą do wszystkich pracowników, należy użyć COALESCE Aby otrzymać tylko niepustych wartości znalezione w hourly_wage, salary, a commission.

SET NOCOUNT ON;
GO
USE tempdb;
IF OBJECT_ID('dbo.wages') IS NOT NULL
    DROP TABLE wages;
GO
CREATE TABLE dbo.wages
(
    emp_id        tinyint   identity,
    hourly_wage   decimal   NULL,
    salary        decimal   NULL,
    commission    decimal   NULL,
    num_sales     tinyint   NULL
);
GO
INSERT dbo.wages (hourly_wage, salary, commission, num_sales)
VALUES
    (10.00, NULL, NULL, NULL),
    (20.00, NULL, NULL, NULL),
    (30.00, NULL, NULL, NULL),
    (40.00, NULL, NULL, NULL),
    (NULL, 10000.00, NULL, NULL),
    (NULL, 20000.00, NULL, NULL),
    (NULL, 30000.00, NULL, NULL),
    (NULL, 40000.00, NULL, NULL),
    (NULL, NULL, 15000, 3),
    (NULL, NULL, 25000, 2),
    (NULL, NULL, 20000, 6),
    (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 dbo.wages
ORDER BY 'Total Salary';
GO

Here is the result set.

Całkowita wynagrodzeń

------------

20800.0000

41600.0000

62400.0000

83200.0000

10000.0000

20000.0000

30000.0000

40000.0000

45000.0000

50000.0000

120000.0000

56000.0000

(dotyczy wiersze 12)