Udostępnij za pośrednictwem


COALESCE (Transact-SQL)

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

Ikona łącza do tematuJęzyka Transact-SQL składni konwencje

Składnia

COALESCE ( expression [ ,...n ] ) 

Argumenty

Zwracane typy

Zwraca typ danych expression danych najwyższy wpisz pierwszeństwo.Jeśli wszystkie wyrażenia są nonnullable, wynik jest wpisana jako nonnullable.

Uwagi

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

Ostrzeżenie

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

ŁĄCZONEJ (expression1,...n) jest odpowiednikiem wyrażeniew przypadku:

CASE

   WHEN (expression1 IS NOT NULL) THEN expression1

   WHEN (expression2 IS NOT NULL) THEN expression2

   ...

   ELSE expressionN

END

ISNULL i ŁĄCZONEJ chociaż równoważne, może odmiennie.wyrażenie obejmujących ISNULL z innych niż-parametrynull jest traktowana jako NOT NULL podczas wyrażenia dotyczące ŁĄCZONEJ z innych niż — parametrynull jest traktowana jako wartość NULL.W SQL Server, do wyrażenia indeksu obejmującego ŁĄCZONEJ z innych niż-parametrów onull , obliczanej kolumna mogą być pozostawione przy użyciuatrybut kolumnaPERSISTED w następującej instrukcja:

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

Przykłady

A.Prosty przykład uruchomiony

W poniższym przykładzie jak COALESCE , aby zaznaczyć dane z pierwszej kolumna , które ma wartości niepustych.

USE AdventureWorks2008R2;
GO
SELECT Name, Class, Color, ProductNumber,
COALESCE(Class, Color, ProductNumber) AS FirstNotNull
FROM Production.Product ;
GO

B.Z systemem złożonym przykładem

W poniższym przykładzie wages tabela zawiera trzy kolumny, które zawierają informacje o rocznej wynagrodzeń pracowników: godzinową, wynagrodzenia i Komisji.Jednakże pracownik otrzymuje tylko jeden typ płacy.Aby ustalić całkowitą kwotę zapłaconą wszystkich pracowników, należy użyć COALESCE do otrzymywania niepustych wartości znalezionych w hourly_wage, salary, i 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

Oto zestaw wyników.

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)

Zobacz także

Odwołanie