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