COALESCE(Transact-SQL)
해당 인수 중에서 Null이 아닌 첫 번째 식을 반환합니다.
구문
COALESCE ( expression [ ,...n ] )
인수
- expression
모든 형식의 식입니다.
반환 유형
데이터 형식 우선 순위가 가장 높은 expression의 데이터 형식을 반환합니다.
주의
모든 인수가 NULL이면 COALESCE는 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는 동일하지만 서로 다르게 동작할 수 있습니다. 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개 열이 포함됩니다. 그러나 각 직원은 이 중 한 종류의 급여만 받습니다. 모든 직원에게 지급된 전체 급여액을 확인하려면 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)