COALESCE (Transact-SQL)
引数の中から、NULL でない最初の式を返します。
構文
COALESCE ( expression [ ,...n ] )
引数
- expression
任意のデータ型の式を指定します。
戻り値の型
expression のデータ型のうち、最も優先順位が高いものを返します。
解説
すべての引数が NULL の場合、COALESCE では NULL が返されます。
メモ : |
---|
NULL 値の少なくとも 1 つは、型指定された 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 は同じですが、動作は異なる場合があります。NULL 以外のパラメータを使用して ISNULL を呼び出す式は NOT NULL であると見なされ、NULL 以外のパラメータを使用して COALESCE を呼び出す式は NULL と見なされます。SQL Server では、NULL 以外のパラメータを使用して COALESCE を呼び出す式にインデックスを設定するには、次のステートメントのように、PERSISTED 列属性を使用して計算列を保存できます。
CREATE TABLE #CheckSumTest
(
ID int identity ,
Num int DEFAULT ( RAND() * 100 ) ,
RowCheckSum AS COALESCE( CHECKSUM( id , num ) , 0 ) PERSISTED PRIMARY KEY
)
例
次の例では、wages
テーブルに、従業員の年俸に関する情報を表す 3 つの列 (時給、給与、歩合) が含まれています。ただし、1 人の従業員が受け取る給与の種類は 1 つだけです。すべての従業員に支払われている給料の総額を算出するには、COALESCE
関数を使って hourly_wage
、salary
、および commission
から 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)