CASE 문은 SQL에서 조건별로 서로 다른 결과를 반환할 때 유용하게 사용됩니다. CASE 문은 두 가지 형태로 사용될 수 있습니다:
1. 단순 CASE 표현식 (Simple CASE Expression): 특정 값에 따라 분기.
2. 검색 CASE 표현식 (Searched CASE Expression): 조건에 따라 분기.
1. 단순 CASE 표현식
단순 CASE 표현식은 특정 값이 어떤 조건에 해당하는지 비교하여 그에 따른 결과를 반환합니다.
CASE input_expression
WHEN when_expression THEN result_expression
[ ...n ]
[ ELSE else_result_expression ]
END
• 설명:
• input_expression: 비교할 값.
• when_expression: 특정 값과 비교.
• result_expression: when_expression이 일치할 때 반환할 값.
• ELSE는 옵션이며, WHEN 조건이 모두 일치하지 않을 경우 반환할 값입니다.
예제:
SELECT
ProductID,
ProductName,
CASE CategoryID
WHEN 1 THEN 'Category A'
WHEN 2 THEN 'Category B'
WHEN 3 THEN 'Category C'
ELSE 'Other Category'
END AS CategoryName
FROM Products;
위 예제에서 CategoryID가 1이면 ‘Category A’, 2이면 ‘Category B’, 3이면 ‘Category C’를 반환하고, 그 외의 경우에는 ‘Other Category’를 반환합니다.
2. 검색 CASE 표현식
검색 CASE 표현식은 다양한 조건을 평가하여 그 결과에 따라 다른 값을 반환합니다.
CASE
WHEN condition THEN result_expression
[ ...n ]
[ ELSE else_result_expression ]
END
• 설명:
• condition: 참 또는 거짓을 평가할 수 있는 조건.
• result_expression: 조건이 참일 때 반환할 값.
• ELSE는 옵션이며, 모든 조건이 거짓일 경우 반환할 값입니다.
예제:
SELECT
EmployeeID,
FirstName,
LastName,
Salary,
CASE
WHEN Salary < 3000 THEN 'Low'
WHEN Salary >= 3000 AND Salary < 6000 THEN 'Medium'
ELSE 'High'
END AS SalaryLevel
FROM Employees;
위 예제에서 Salary 값이 3000 미만이면 ‘Low’, 3000 이상 6000 미만이면 ‘Medium’, 6000 이상이면 ‘High’를 반환합니다.
3. CASE 문을 이용한 계산
CASE 문을 사용하여 계산할 수도 있습니다.
예제:
SELECT
OrderID,
Quantity,
Price,
CASE
WHEN Quantity >= 10 THEN Quantity * Price * 0.9 -- 10개 이상 구매 시 10% 할인
ELSE Quantity * Price
END AS TotalPrice
FROM Orders;
위 예제는 주문 수량이 10개 이상이면 10% 할인을 적용한 총 가격을 계산하고, 그렇지 않으면 정상 가격을 반환합니다.
4. CASE 문을 WHERE 절에서 사용
CASE 문은 SELECT 절뿐만 아니라 WHERE 절에서 조건을 처리할 때도 사용할 수 있습니다.
예제:
SELECT
OrderID,
CustomerID,
OrderDate
FROM Orders
WHERE
CASE
WHEN OrderDate >= '2024-01-01' THEN 1
ELSE 0
END = 1;
이 예제에서는 OrderDate가 2024년 1월 1일 이후인 경우에만 데이터를 반환합니다. CASE 문은 WHERE 절에서 특정 조건을 만족하는지 여부를 결정하는 데 사용되었습니다.
5. CASE 문을 GROUP BY와 함께 사용
CASE 문은 GROUP BY 구문과 함께 사용하여 집계 결과를 조건에 따라 다르게 그룹화할 수 있습니다.
예제:
SELECT
CASE
WHEN CategoryID = 1 THEN 'Category A'
WHEN CategoryID = 2 THEN 'Category B'
ELSE 'Other'
END AS CategoryName,
COUNT(ProductID) AS ProductCount
FROM Products
GROUP BY
CASE
WHEN CategoryID = 1 THEN 'Category A'
WHEN CategoryID = 2 THEN 'Category B'
ELSE 'Other'
END;
위 예제는 카테고리에 따라 제품의 수를 집계하며, CategoryID에 따라 서로 다른 이름으로 그룹화합니다.
6. CASE 문을 ORDER BY와 함께 사용
CASE 문은 ORDER BY 구문에서도 활용될 수 있습니다. 특정 조건에 따라 결과를 정렬할 때 유용합니다.
예제:
SELECT
ProductID,
ProductName,
Price
FROM Products
ORDER BY
CASE
WHEN Price > 100 THEN 'High'
ELSE 'Low'
END;
위 예제에서는 가격이 100보다 큰 상품은 ‘High’, 그렇지 않은 상품은 ‘Low’로 분류하고, 이 값을 기준으로 정렬합니다.
요약
CASE 문은 SQL에서 매우 유연한 조건 처리 기능을 제공합니다. 이를 통해 특정 값이나 조건에 따라 다양한 결과를 반환하거나, 데이터를 그룹화, 필터링, 계산하는 데 활용할 수 있습니다. CASE 문을 사용하면 복잡한 로직을 SQL 쿼리 안에서 간단하게 처리할 수 있습니다.
'Database > Mssql' 카테고리의 다른 글
MSSQL - TABLE JOIN UPDATE, 테이블 조인 업데이트 (1) | 2024.09.07 |
---|---|
MSSQL - DATE CONVERT,FORMAT 날짜 변환 방법 (0) | 2024.09.07 |