안녕하세요~
조회 쿼리 도움 요청드립니다.
아래 예시 쿼리와 같이, 날짜값을 월~일 요일까지 한 컬럼에 YYYYYYY <- 이런식으로 넣었습니다.
조회할때 한글로 변환해서 일,월,화,수,목,금,토 <-- 이렇게 표현할려고 합니다.
그럴때 제가 한 쿼리에는 "쉼표"를 넣었는데, 마직막 값에는 "쉼표"를 없애고 싶은데 방법을 모르겠어서요 ^^;;
고수님들의 조언 부탁드립니다.
WITH TEST_DATA AS (
SELECT
'A' AS BIZ,
'YNNYNNN' AS DATE1,
'YNNYNNN' AS DATE2
FROM DUAL
UNION ALL
SELECT
'B' AS BIZ,
'YYYYNNN' AS DATE1,
'YYYYNNN' AS DATE2
FROM DUAL
)
SELECT
BIZ,
DECODE(SUBSTR(NVL(DATE1,'NNNNNNN'),1,1), 'Y', '일,', '') ||
DECODE(SUBSTR(NVL(DATE1,'NNNNNNN'),2,1), 'Y', '월,', '') ||
DECODE(SUBSTR(NVL(DATE1,'NNNNNNN'),3,1), 'Y', '화,', '') ||
DECODE(SUBSTR(NVL(DATE1,'NNNNNNN'),4,1), 'Y', '수,', '') ||
DECODE(SUBSTR(NVL(DATE1,'NNNNNNN'),5,1), 'Y', '목,', '') ||
DECODE(SUBSTR(NVL(DATE1,'NNNNNNN'),6,1), 'Y', '금,', '') ||
DECODE(SUBSTR(NVL(DATE1,'NNNNNNN'),7,1), 'Y', '토,', '') AS DATE1
, DECODE(SUBSTR(NVL(DATE2,'NNNNNNN'),1,1), 'Y', '일,', '') ||
DECODE(SUBSTR(NVL(DATE2,'NNNNNNN'),2,1), 'Y', '월,', '') ||
DECODE(SUBSTR(NVL(DATE2,'NNNNNNN'),3,1), 'Y', '화,', '') ||
DECODE(SUBSTR(NVL(DATE2,'NNNNNNN'),4,1), 'Y', '수,', '') ||
DECODE(SUBSTR(NVL(DATE2,'NNNNNNN'),5,1), 'Y', '목,', '') ||
DECODE(SUBSTR(NVL(DATE2,'NNNNNNN'),6,1), 'Y', '금,', '') ||
DECODE(SUBSTR(NVL(DATE2,'NNNNNNN'),7,1), 'Y', '토,', '') AS DATEE
FROM TEST_DATA;
* 쿼리결과값
| BIZ | DATE1 | DATE2 |
| A | 일,수, | 일,수, |
| B | 일,월,화,수, | 일,월,화,수, |
* 원하는 결과값
|
|||||||||
콤마를 앞에다 붙이고 substr(DATE1, 2) 로 1번자리로 자르셔도 되요~~
SELECT SUBSTR(',일,월,화,수', 2) FROM dual
오~ 이런 간단한 방법이~ 감사합니다 ^^
LISTAGG 함수를 사용하셔도 됩니다.
WITH TEST_DATA AS (
SELECT
'A' AS BIZ,
'YNNYNNN' AS DATE1,
'YNNYNNN' AS DATE2
FROM DUAL
UNION ALL
SELECT
'B' AS BIZ,
'YYYYNNN' AS DATE1,
'YYYYNNN' AS DATE2
FROM DUAL
)
SELECT BIZ,
LISTAGG(
DECODE(SUBSTR(NVL(DATE1,'NNNNNNN'), N, 1), 'Y', SUBSTR('일월화수목금토일', N, 1), ''), ',')
WITHIN GROUP (ORDER BY ROWNUM) AS DATE1,
LISTAGG(
DECODE(SUBSTR(NVL(DATE2,'NNNNNNN'), N, 1), 'Y', SUBSTR('일월화수목금토일', N, 1), ''), ',')
WITHIN GROUP (ORDER BY ROWNUM) AS DATE2
FROM(
SELECT ROWNUM AS N
FROM ALL_OBJECTS
WHERE ROWNUM <= 7),
TEST_DATA
GROUP BY BIZ
;
NVL 불필요.
, '' 부분은 생략 가능