반응형
오라클의 DECODE 함수는 정말 막강한 기능을 제공하고 있습니다.
DECODE를 사용하여 간결한 SQL을 만들기도 하는데 SQLite에는 DECODE 함수가 없습니다.
DECODE는 SQL 표준이 아닌 오라클의 기능으로 생각해야 할 듯하네요.
[CASE 문법1]
CASE case_expression
WHEN when_expression_1 THEN result_1
WHEN when_expression_2 THEN result_2
...
[ ELSE result_else ]
END
[예제 쿼리1]
SELECT NAME, YYYY||MM||DD,
CASE IS_CHECK
WHEN 'Y' THEN '체크됨'
WHEN 'N' THEN '체크안됨'
ELSE '값없음'
END
FROM HISTORY
[CASE 문법2]
CASE
WHEN bool_expression_1 THEN result_1
WHEN bool_expression_2 THEN result_2
[ ELSE result_else ]
END
[예제 쿼리2]
SELECT NAME, YYYY||MM||DD,
CASE
WHEN IS_CHECK = 'Y' THEN '체크됨'
WHEN IS_CHECK = 'N' THEN '체크안됨'
ELSE '값없음'
END
FROM HISTORY
현재 작업중이 안드로이드 프로젝트에 사용한 예입니다.
체크리스트 안드로이드 앱을 개발하고 있고, 집계 관련해서 SQLite의 CASE문을 사용했습니다.
일주일동안의 체크리스트 현황을 보여주는 쿼리를 작성하고 화면을 구성했습니다.
[쿼리]
SELECT NAME, MAX(SORT) SORT,
MAX(CASE YYYY || MM || DD WHEN '20210213' THEN IS_CHECK ELSE 'N' END) AS A,
MAX(CASE YYYY || MM || DD WHEN '20210214' THEN IS_CHECK ELSE 'N' END) AS B,
MAX(CASE YYYY || MM || DD WHEN '20210215' THEN IS_CHECK ELSE 'N' END) AS C,
MAX(CASE YYYY || MM || DD WHEN '20210216' THEN IS_CHECK ELSE 'N' END) AS D,
MAX(CASE YYYY || MM || DD WHEN '20210217' THEN IS_CHECK ELSE 'N' END) AS E,
MAX(CASE YYYY || MM || DD WHEN '20210218' THEN IS_CHECK ELSE 'N' END) AS F,
MAX(CASE YYYY || MM || DD WHEN '20210219' THEN IS_CHECK ELSE 'N' END) AS G
FROM HISTORY
WHERE MAIN_ID = 1
AND YYYY BETWEEN '2021' AND '2021'
AND WW = '00'
AND YYYY || MM || DD BETWEEN '20210213' AND '20210219'
GROUP BY NAME
ORDER BY SORT, NAME
[쿼리 결과]
[안드로이드 화면]
반응형
'데이터베이스 > SQLite' 카테고리의 다른 글
SQLite 오라클의 NVL과 같은 NULL 처리 (0) | 2021.03.04 |
---|---|
SQLite - Select 결과 JSON으로 변경하기 (0) | 2021.03.02 |
SQLite inert or replace(오라클/MS-SQL Merge 기능) (0) | 2021.02.08 |
SQLite Table 만들기 (0) | 2016.02.11 |
SQLite Database 만들기 (0) | 2016.01.29 |
댓글