다음을 통해 공유


COALESCE(Transact-SQL)

해당 인수 중에서 Null이 아닌 첫 번째 식을 반환합니다.

항목 링크 아이콘Transact-SQL 구문 표기 규칙

구문

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)

도움말 및 정보

SQL Server 2005 지원 받기