BİRLEŞİM (Transact-sql)

Bağımsız değişkenler arasında ilk nonnull ifade verir.

Konu bağlantısı simgesi 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)

Ayrıca bkz.

Başvuru

ISNULL (Transact-SQL)

CASE (Transact-sql)