COALESCE (Transact-SQL)

傳回其引數中第一個非 Null 的運算式。

主題連結圖示Transact-SQL 語法慣例

語法

COALESCE ( expression [ ,...n ] ) 

引數

  • expression
    這是任何類型的運算式

傳回類型

傳回具有最高資料類型優先順序的 expression 資料類型。

備註

如果所有引數都是 NULL,COALESCE 便會傳回 NULL。

ms190349.note(zh-tw,SQL.90).gif附註:
至少其中一個 Null 值必須是 NULL 類型。

COALESCE(expression1**,**...n) 相當於這個 CASE 函數:

CASE
   WHEN (expression1 IS NOT NULL) THEN expression1
   ...
   WHEN (expressionN IS NOT NULL) THEN expressionN
   ELSE NULL
END

ISNULL 和 COALESCE 雖然相當,但行為可能不同。使用 ISNULL 和非 Null 參數的運算式會視為是非 NULL,而使用 COALESCE 和非 Null 參數的運算式則會視為是 NULL。在 SQL Server 中,對於使用 COALESCE 和非 Null 參數的索引運算式,計算的資料行可以使用 PERSISTED 資料行屬性保存,如下列陳述式所示:

CREATE TABLE #CheckSumTest 
(
        ID int identity ,
        Num int DEFAULT ( RAND() * 100 ) ,
        RowCheckSum AS COALESCE( CHECKSUM( id , num ) , 0 ) PERSISTED PRIMARY KEY
)

範例

在下列範例中,wages 資料表有三個含員工年薪 (時薪、月薪加上分紅) 的資料行。不過,員工只會收到其中一種款項。若要算出支付給所有員工的總金額,請使用 COALESCE 函數,只接收 hourly_wagesalarycommission 中的非 Null 值。

SET NOCOUNT ON;
GO
USE master;
IF EXISTS (SELECT name FROM sys.tables
      WHERE name = 'wages')
   DROP TABLE wages;
GO
CREATE TABLE wages
(
   emp_id      tinyint    identity,
   hourly_wage   decimal   NULL,
   salary      decimal    NULL,
   commission   decimal   NULL,
   num_sales   tinyint   NULL
);
GO
INSERT wages VALUES(10.00, NULL, NULL, NULL);
INSERT wages VALUES(20.00, NULL, NULL, NULL);
INSERT wages VALUES(30.00, NULL, NULL, NULL);
INSERT wages VALUES(40.00, NULL, NULL, NULL);
INSERT wages VALUES(NULL, 10000.00, NULL, NULL);
INSERT wages VALUES(NULL, 20000.00, NULL, NULL);
INSERT wages VALUES(NULL, 30000.00, NULL, NULL);
INSERT wages VALUES(NULL, 40000.00, NULL, NULL);
INSERT wages VALUES(NULL, NULL, 15000, 3);
INSERT wages VALUES(NULL, NULL, 25000, 2);
INSERT wages VALUES(NULL, NULL, 20000, 6);
INSERT wages VALUES(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 wages;
GO

以下為結果集:

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)

請參閱

參考

CASE (Transact-SQL)
ISNULL (Transact-SQL)
系統函數 (Transact-SQL)

說明及資訊

取得 SQL Server 2005 協助