BİRLEŞİM (Transact-sql)
Bağımsız değişkenler arasında ilk nonnull ifade verir.
Transact-SQL Sözdizim Kuralları
Sözdizimi
COALESCE ( expression [ ,...n ] )
Bağımsız değişkenler
- expression
Olan bir ifade türü.
Dönüş Türleri
Veri türü verir expressionen yüksek veri türü önceliği. Tüm ifadelerin nonnullable, sonuç nonnullable yazılmış.
Açıklamalar
Tüm bağımsız değişkenler null ise, BIRLEŞIM null döndürüyor.
[!NOT]
Boş değerler en az bir yazılı null olmalıdır.
BİRLEŞİM (expression1,...n) aşağıdaki durumda ifade eşdeğerdir:
CASE
WHEN (expression1 IS NOT NULL) THEN expression1
WHEN (expression2 IS NOT NULL) THEN expression2
...
ELSE expressionN
END
IsNull ve birleşim eşdeğer olsa, farklı davranabilir. IsNull boş olmayan parametreleri içeren bir deyim değil sayılır null, BIRLEŞIM null olmayan parametreleri ile ilgili ifadeleri sırasında kabul edilir olması için. De SQL Server, to index ifadeleri, BIRLEŞIM null olmayan parametreleri ile ilgili hesaplanan sütun PERSISTED sütun özniteliğinde olarak aşağıdaki deyimi kullanarak kalıcı:
CREATE TABLE #CheckSumTest
(
ID int identity ,
Num int DEFAULT ( RAND() * 100 ) ,
RowCheckSum AS COALESCE( CHECKSUM( id , num ) , 0 ) PERSISTED PRIMARY KEY
);
CREATE TABLE #CheckSumTest
(
ID int identity ,
Num int DEFAULT ( RAND() * 100 ) ,
RowCheckSum AS COALESCE( CHECKSUM( id , num ) , 0 ) PERSISTED PRIMARY KEY
);
Örnekler
A.Basit bir örnek çalışıyor
Aşağıdaki örnekte gösterildiği nasıl COALESCEnonnull değeri olan ilk sütun verileri seçer.
USE AdventureWorks2012 ;
GO
SELECT Name, Class, Color, ProductNumber,
COALESCE(Class, Color, ProductNumber) AS FirstNotNull
FROM Production.Product ;
GO
B.Karmaşık bir örnek çalışıyor
Aşağıdaki örnekte, wagestablo, çalışanların yıllık ücretleri hakkında bilgiler içeren üç sütun içerir: Saat ücreti, maaş ve Komisyonu. Ancak, çalışan tek bir ödeme türünü alır. Tüm çalışanlara ödenen toplam tutarı belirlemek için COALESCEsadece nonnull değerini almak için bulunan hourly_wage, salary, ve 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
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
Sonuç kümesi buradadır.
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)