Aracılığıyla paylaş


COALESCE (Transact-SQL)

Bağımsız değişkenler arasında ilk geçirecektir ifade verir.

Konu bağlantısı simgesiTransact-SQL sözdizimi kuralları

Sözdizimi

COALESCE ( expression [ ,...n ] ) 

Bağımsız değişkenler

  • expression
    Olan bir ifade herhangi bir tür.

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)