SELECT A.CUST_ID /*회원ID*/
, TRUNC(MONTHS_BETWEEN(TRUNC(SYSDATE), TO_DATE(TRIM(B.BIRTH_YMD),'YYYYMMDD')) / 12) AGE
, DECODE(B.GENDER_CD, '1', '남', '2', '여', '') GENDER_CD
, TO_CHAR(TO_DATE(A.TRAN_YMD, 'YYYY-MM-DD'), 'YYYY-MM-DD') TRAN_YMD
, MAX((SELECT CASE WHEN RESULT_SUBJECT IS NOT NULL THEN TO_CHAR(RESULT_SUBJECT)
WHEN RESULT_OBJECT IS NOT NULL THEN RESULT_OBJECT
ELSE TO_CHAR(RESULT_POINT)
END AS RESULT1 FROM MBQS041LT C WHERE A.QSC_RESULT_NO = C.QSC_RESULT_NO AND C.QSC_QUESTION_NO = '1' )) RESULT1
, MAX((SELECT CASE WHEN RESULT_SUBJECT IS NOT NULL THEN TO_CHAR(RESULT_SUBJECT)
WHEN RESULT_OBJECT IS NOT NULL THEN RESULT_OBJECT
ELSE TO_CHAR(RESULT_POINT)
END AS RESULT1 FROM MBQS041LT C WHERE A.QSC_RESULT_NO = C.QSC_RESULT_NO AND C.QSC_QUESTION_NO = '2' )) RESULT2
, '' FREE_COMM
FROM MBQS040LT A
, MBCU100MT B
, VW_MBCM400MT D
WHERE A.QSC_ID = '2023041100087'
AND A.CUST_ID = B.CUST_ID
AND A.STORE_CD = D.STORE_CD
AND NVL(DEL_YN, 'N') = 'N'
GROUP BY A.CUST_ID, B.BIRTH_YMD, B.GENDER_CD, A.TRAN_YMD
RESULT1, RESULT2 부분이 고정이었는데 이부분이 건수 제한이 없어졌습니다
해당 부분을 계속 하드코딩 하는 방법 없이 조회하는 방법이 있을까요?
MBQS041LT 테이블은 리스트라 pivot 을 해야 할까요?
C.QSC_QUESTION_NO = '1' 은 RESULT1
C.QSC_QUESTION_NO = '2' 은 RESULT2
이런식으로 화면에서 맵핑할 예정입니다.
SELECT a.cust_id /*회원ID*/
, TRUNC(MONTHS_BETWEEN(TRUNC(sysdate), TO_DATE(TRIM(b.birth_ymd), 'yyyymmdd')) / 12) age
, DECODE(b.gender_cd, '1', '남', '2', '여') gender_cd
, TO_CHAR(TO_DATE(a.tran_ymd, 'yyyy-mm-dd'), 'yyyy-mm-dd') tran_ymd
, MAX(DECODE(c.qsc_question_no, '1', result0)) result1
, MAX(DECODE(c.qsc_question_no, '2', result0)) result2
, '' free_comm
FROM mbqs040lt a
, mbcu100mt b
-- , vw_mbcm400mt d
, (SELECT qsc_result_no
, qsc_question_no
, COALESCE(TO_CHAR(result_subject), result_object, TO_CHAR(result_point)) result0
FROM mbqs041lt
WHERE qsc_question_no IN ('1', '2')
) c
WHERE a.qsc_id = '2023041100087'
AND a.cust_id = b.cust_id
-- AND a.store_cd = d.store_cd
AND NVL(del_yn, 'N') = 'N'
AND a.qsc_result_no = c.qsc_result_no(+)
GROUP BY a.cust_id, b.birth_ymd, b.gender_cd, a.tran_ymd
;
감사합니다. 늦게 확인을 했네요
, TO_CHAR(TO_DATE(a.tran_ymd, 'yyyy-mm-dd'), 'yyyy-mm-dd') tran_ymd
이 구문은. 뭐하러 날짜로 바꿨다가 다시 문자로 바꾸지? 그냥 원래대로이지 않나?
라는 오해를 불러일으키는 구문이네요. 아니면 실제로 그렇던가?
아마도, 'yyyymmdd' 형식을 'yyyy-mm-dd' 형식으로 바꾸려는 의도로 보입니다.
그렇다면 포멧을 정확하게 적어주셔야 오해를 불러일으키지 않습니다.
, TO_CHAR(TO_DATE(a.tran_ymd, 'yyyymmdd'), 'yyyy-mm-dd') tran_ymd