COALESCE (Transact-SQL)
Zwraca pierwszy niepustych wyrażenie między jej argumentów.
Składnia
COALESCE ( expression [ ,...n ] )
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)