조회쿼리에 마지막 값에 쉼표 없애는 쿼리 0 4 4,344

by 권사마 [SQL Query] [2024.06.07 15:05:42]


안녕하세요~
조회 쿼리 도움 요청드립니다.
아래 예시 쿼리와 같이, 날짜값을 월~일 요일까지 한 컬럼에 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 일,월,화,수, 일,월,화,수,

* 원하는 결과값

BIZ DATE1 DATE2
A 일,수 일,수
B 일,월,화,수 일,월,화,수
 

 

by v상이v [2024.06.07 16:35:58]

콤마를 앞에다 붙이고 substr(DATE1, 2) 로 1번자리로 자르셔도 되요~~ 

 

SELECT SUBSTR(',일,월,화,수', 2) FROM dual


by 권사마 [2024.06.07 16:57:52]

오~ 이런 간단한 방법이~ 감사합니다 ^^


by 신히 [2024.06.10 08:03:24]

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
;


소스 테스트 해보기


by 마농 [2024.06.10 08:55:40]

NVL 불필요.
, '' 부분은 생략 가능

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입