MSSQL 여러 컬럼의 MIN, MAX, SUM, AVG 구하기
하나의 Row에 여러 컬럼 중 최소값, 최대값, 합계 등을 구하는 방법입니다. 많이 사용하지 않는 쿼리지만 알고 있으면 힘이 되겠죠. 아래의 간단한 예제를 보고 쉽게 따라 할 수 있을 겁니다. WITH T AS ( SELECT 12 A, 13 B, 56 C, 123 D, 3 E ) SELECT (SELECT MIN(COL) FROM (VALUES (A), (B), (C), (D), (E)) AS V(COL)) MIN_VAL, -- 최소값 (SELECT MAX(COL) FROM (VALUES (A), (B), (C), (D), (E)) AS V(COL)) MAX_VAL, -- 최대값 (SELECT SUM(COL) FROM (VALUES (A), (B), (C), (D), (E)) AS V(COL)) SUM..
2023. 6. 13.
MSSQL 분모가 0 일때 처리 방법
MSSQL 데이터베이스의 데이터로 계산하는 쿼리에서 분모가 0일 때 아래와 같은 오류가 발생합니다. WITH TEST AS ( SELECT 10 A, 0 B ) SELECT A / B FROM TEST 0으로 나누기 오류가 발생했습니다. 아래의 쿼리 같이 IIF 또는 CASE를 사용하여 0 인 경우를 처리하기도 합니다. WITH TEST AS ( SELECT 10 A, 0 B ) SELECT IIF(B = 0, 0, A / B), CASE WHEN B = 0 THEN NULL ELSE A / B END FROM TEST 다른 방법으로 ANSI_WARNINGS, ARITHIGNORE, ARITHABORT을 설정하는 방법입니다. ANSI_WARNINGS ON으로 설정한 경우 SUM, AVG, MAX, MIN..
2022. 7. 7.
MSSQL 개월 차이에 대해서
MSSQL에서 두 날짜의 개월 차이를 구하는 함수로 DATEDIFF를 사용하면 됩니다. 하지만, DATEDIFF를 사용하면 일자까지를 계산하는 것이 아닌 단순히 월의 차이만을 구합니다. 즉, 올림을 하는 현상이 발생합니다. 아래의 쿼리는 8.x로 계산이 되어야 하지만, 월만으로 계산하여 9개월 나옵니다. SELECT DATEDIFF(MONTH, CONVERT(DATE, '20150529'), CONVERT(DATE, '20160201')) 개월수를 버림으로 처리하고 싶다면 아래의 쿼리로 처리해야 합니다. 결과는 8개월이 됩니다. SELECT CASE WHEN DATEPART(DAY, CONVERT(DATE, '20150529')) > DATEPART(DAY, CONVERT(DATE, '20160201')..
2022. 5. 24.