오라클 sql 쿼리 질문입니다!! 0 2 535

by 십이장기 [SQL Query] [2021.06.20 18:11:01]


테이블 A에

 

id   회원id     쿠폰마스터ID   발급일자       사용일자

1       AA          30              20210102      20210113

2       AA          30              20210207       NULL    

3       AA          40              20210208      20210217

4       BB           30              20210101      NULL

 

이렇게 있을때 

각 쿠폰마스터ID,회원ID별로 데이터를 각 월(1월부터 12월까지)에 발급했는지여부와 사용했는지 여부를 Y,N으로 나타내고싶은데

 

회원ID      쿠폰마스터ID   1월발급여부    1월사용여부   2월발급여부  2월사용여부  ~~ 12월발급여부  12월사용여부

  AA           30                  Y                 Y               Y                N                     N                  N

  AA           40                  N                 N              Y                N                     N                  N

  BB           30                   Y                 N              N              N                       N                  N     

 

이런식으로 데이터를 나타내고 싶은데 혹시 방법이 없을까요??             

by 마농 [2021.06.21 08:32:58]
WITH t AS
(
SELECT 1 id, 'AA' 회원id, 30 쿠폰마스터ID, '20210102' 발급일자, '20210113' 사용일자 FROM dual
UNION ALL SELECT 2, 'AA', 30, '20210207',  NULL      FROM dual
UNION ALL SELECT 3, 'AA', 40, '20210208', '20210217' FROM dual
UNION ALL SELECT 4, 'BB', 30, '20210101',  NULL      FROM dual
)
SELECT 회원ID
     , 쿠폰마스터ID
     , NVL(MIN(DECODE(SUBSTR(발급일자, 5, 2), '01', 'Y')), 'N') 발급여부_01
     , NVL(MIN(DECODE(SUBSTR(사용일자, 5, 2), '01', 'Y')), 'N') 사용여부_01
     , NVL(MIN(DECODE(SUBSTR(발급일자, 5, 2), '02', 'Y')), 'N') 발급여부_02
     , NVL(MIN(DECODE(SUBSTR(사용일자, 5, 2), '02', 'Y')), 'N') 사용여부_02
     , NVL(MIN(DECODE(SUBSTR(발급일자, 5, 2), '03', 'Y')), 'N') 발급여부_03
     , NVL(MIN(DECODE(SUBSTR(사용일자, 5, 2), '03', 'Y')), 'N') 사용여부_03
     , NVL(MIN(DECODE(SUBSTR(발급일자, 5, 2), '04', 'Y')), 'N') 발급여부_04
     , NVL(MIN(DECODE(SUBSTR(사용일자, 5, 2), '04', 'Y')), 'N') 사용여부_04
     , NVL(MIN(DECODE(SUBSTR(발급일자, 5, 2), '05', 'Y')), 'N') 발급여부_05
     , NVL(MIN(DECODE(SUBSTR(사용일자, 5, 2), '05', 'Y')), 'N') 사용여부_05
     , NVL(MIN(DECODE(SUBSTR(발급일자, 5, 2), '06', 'Y')), 'N') 발급여부_06
     , NVL(MIN(DECODE(SUBSTR(사용일자, 5, 2), '06', 'Y')), 'N') 사용여부_06
     , NVL(MIN(DECODE(SUBSTR(발급일자, 5, 2), '07', 'Y')), 'N') 발급여부_07
     , NVL(MIN(DECODE(SUBSTR(사용일자, 5, 2), '07', 'Y')), 'N') 사용여부_07
     , NVL(MIN(DECODE(SUBSTR(발급일자, 5, 2), '08', 'Y')), 'N') 발급여부_08
     , NVL(MIN(DECODE(SUBSTR(사용일자, 5, 2), '08', 'Y')), 'N') 사용여부_08
     , NVL(MIN(DECODE(SUBSTR(발급일자, 5, 2), '09', 'Y')), 'N') 발급여부_09
     , NVL(MIN(DECODE(SUBSTR(사용일자, 5, 2), '09', 'Y')), 'N') 사용여부_09
     , NVL(MIN(DECODE(SUBSTR(발급일자, 5, 2), '10', 'Y')), 'N') 발급여부_10
     , NVL(MIN(DECODE(SUBSTR(사용일자, 5, 2), '10', 'Y')), 'N') 사용여부_10
     , NVL(MIN(DECODE(SUBSTR(발급일자, 5, 2), '11', 'Y')), 'N') 발급여부_11
     , NVL(MIN(DECODE(SUBSTR(사용일자, 5, 2), '11', 'Y')), 'N') 사용여부_11
     , NVL(MIN(DECODE(SUBSTR(발급일자, 5, 2), '12', 'Y')), 'N') 발급여부_12
     , NVL(MIN(DECODE(SUBSTR(사용일자, 5, 2), '12', 'Y')), 'N') 사용여부_12
  FROM t
 WHERE 발급일자 LIKE '2021%'
    OR 사용일자 LIKE '2021%'
 GROUP BY 회원ID, 쿠폰마스터ID
 ORDER BY 회원ID, 쿠폰마스터ID
;

 


by 십이장기 [2021.06.21 17:21:31]

감사합니다~!!!

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