COALESCE (Transact-SQL)
Bağımsız değişkenler arasında ilk geçirecektir ifade verir.
Sözdizimi
COALESCE ( expression [ ,...n ] )
Dönüş Türleri
Veri türü verir expression en yüksek verilerle yazın önceliği.Tüm ifadelerin nonnullable, sonuç nonnullable yazılıyor.
Açıklamalar
BİRLEŞİM bağımsız değişkenlerin tümü null ise, null döndürür.
Not
null değerler en az bir yazılı null olmalıdır.
BİRLEŞİM (expression1,...n) aşağıdaki case ifadeeşdeğerdir:
CASE
WHEN (expression1 IS NOT NULL) THEN expression1
WHEN (expression2 IS NOT NULL) THEN expression2
...
ELSE expressionN
END
IsNull ve birleşim karşılığı olmasa da, farklı şekilde davranabilir.IsNull olmayan ile ilgili bir ifade -null parametre olarak değerlendirilir, birleşim olmayan ile ilgili ifadeleri sırasında null olmayan -null parametre null olarak değerlendirilir.De SQL Server, birleşim olmayan ile ilgili dizin ifadesi için-null parametreler, hesaplanmış bir sütun PERSISTED sütun öznitelik olarak aşağıdaki deyimkullanarak devam eden:
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ışan
Aşağıdaki örnekte gösterildiği nasıl COALESCE seçer verileri ilk sütun olan null olmayan bir değer.
USE AdventureWorks2008R2;
GO
SELECT Name, Class, Color, ProductNumber,
COALESCE(Class, Color, ProductNumber) AS FirstNotNull
FROM Production.Product ;
GO
B.Karmaşık örnek çalıştırma
Aşağıdaki örnekte, wages tablo çalışanların yıllık ücretleri hakkında bilgiler içeren üç sütun içerir: saat ücreti, maaş ve komisyon.Ancak, bir çalışanın yalnızca bir tür ödeme alır.Tüm çalışanlara ödenen toplam tutarı belirlemek için COALESCE almak için yalnızca null olmayan değer 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
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)