COALESCE(Transact-SQL)

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

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

구문

COALESCE ( expression [ ,...n ] ) 

인수

  • expression
    모든 형식의 입니다.

반환 형식

데이터 형식 우선 순위가 가장 높은 expression의 데이터 형식을 반환합니다. 모든 식에서 Null을 허용하지 않으면 결과가 Null을 허용하지 않는 형식으로 처리됩니다.

주의

모든 인수가 NULL이면 COALESCE는 NULL을 반환합니다.

[!참고]

Null 값을 적어도 하나 이상 입력해야 합니다.

COALESCE(expression1,...n)는 다음 CASE 식과 동일합니다.

CASE

   WHEN (expression1 IS NOT NULL) THEN expression1

   WHEN (expression2 IS NOT NULL) THEN expression2

   ...

   ELSE expressionN

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
    );

간단한 예

다음 예에서는 COALESCE가 Null 이외의 값이 있는 첫째 열에서 데이터를 선택하는 방법을 보여 줍니다.

USE AdventureWorks ;

GO

SELECT Name, Class, Color, ProductNumber,

COALESCE(Class, Color, ProductNumber) AS FirstNotNull

FROM Production.Product ;

GO

복잡한 예

다음 예에서는 wages 테이블에 직원의 연봉 정보에 대한 시간별 임금, 월급 및 커미션의 3개 열이 포함됩니다. 그러나 각 직원은 이 중 한 종류의 급여만 받습니다. 모든 직원에게 지급된 총 급여액을 확인하려면 COALESCE 함수를 사용하여 hourly_wage, salary, commission에서 검색된 Null이 아닌 값만 포함시킵니다.

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

결과 집합은 다음과 같습니다.

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개 행 적용됨)