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