쿼리 질문드립니다 0 3 2,263

by Kaiger [SQL Query] [2023.04.14 15:35:43]


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 

이런식으로 화면에서 맵핑할 예정입니다.

by 마농 [2023.04.17 09:06:42]
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
;

 


by Kaiger [2023.04.17 17:34:02]

감사합니다. 늦게 확인을 했네요


by 마농 [2023.04.17 10:24:46]

, 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

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