이벤트 게시판 후기 작성이 되지 않은 건을 조회하고 싶어요. 0 2 2,489

by DJ메탈짱™ [SQL Query] [2016.12.26 19:23:59]


초보초보 입니다.. 조언좀 얻으려고 글남겨봅니다.

게시판과 이벤트 응모 테이블이 있는데.
예) 이벤트 0001의 응모 후기 작성 기간이 10/01 ~ 10/03 이고.
   이벤트에 응모한 사람은 가, 나. 두 사람이라고 가정하고 가만 응모를 했을 경우.

후기를 작성한 사람은 그냥 단순히 join해서 조회화면 되는데... 후기 data가 없는 경우..

후기를 미작성한 사람 건수를 조회하고 싶은데 어떻게 쿼리를 짜야할지 감이 오지 않네요.

목록에는 가님, 나님의 작성 기간에 작성하지 않은 건수를 알고 싶어요.
응모한 사람과 응모하지 않은 사람(데이터가 insert되지 않음)의 결과를 보고싶어요..
아래 표처럼..

  이벤트명 미작성횟수 응모일자
가님 이벤트 001 1 10월 01일
나님 이벤트 001 0 10월 01일

 

조회조건 미작성횟수 "1" 입력시    
  이벤트명 미작성횟수 응모일자
가님 이벤트 001 1 10월 01일

 

SELECT

      B.회원번호 "회원명"

      ,FN_GET_COMMON_NAME('ko', 'EVT', A.이벤트번호, '') AS "이벤트명"

      ,NVL((SELECT COUNT(*) FROM 이벤트후기 AA WHERE AA.이벤트번호 = A.이벤트번호 AND AA.회원번호 = A.회원번호 AND AA.후기순번 = A.후기순번),0) AS "작성건수" --> 미작성건수로 조회하고 싶어요.

      ,TO_CHAR(A.SBSC_SGT_DTIME, 'YYYY-MM-DD') "응모일자"

FROM 이벤트응모 A

    ,회원정보 B

    ,이벤트마스터 C

    ,이벤트후기 D

WHERE A.EVT_NO = '00000000000030'

    AND A.이벤트번호 = C.이벤트번호

    AND A.회원번호 = B.회원번호

    AND A.이벤트번호 = D.이벤트번호   

    AND D.후기등록일 BETWEEN 이벤트후기작성시작일 AND 이벤트후기작성종료일

    AND NVL((SELECT COUNT(*) FROM 이벤트후기 AA WHERE AA.이벤트번호 = A.이벤트번호 AND AA.회원번호 = A.회원번호 AND AA.후기순번 = A.후기순번),0) = 3 --> 0 미작성건수 파라미터

ORDER BY D.후기등록일

by jkson [2016.12.27 08:23:00]

이벤트후기작성시작일,종료일이 이벤트마스터에 있는 건가요?

이벤트별, 회원별로 후기는 3회까지 작성하는 건가요? 1회라도 작성하면 미작성건수는 0이고

작성을 하나도 안 했을 경우에만 미작성건수가 1인가요?

이벤트마스터에 이벤트명은 따로 없는 건지..

일단은 제가 추측한대로 작성해봤습니다.

SELECT 회원명, 이벤트명, 미작성건수, 응모일자
  FROM
    (
    SELECT
           B.회원명 "회원명"
          ,(SELECT FN_GET_COMMON_NAME('ko', 'EVT', A.이벤트번호, '') FROM DUAL) AS "이벤트명"
          ,DECODE((SELECT COUNT(*) 
                     FROM 이벤트후기 AA 
                    WHERE AA.이벤트번호 = A.이벤트번호 
                      AND AA.회원번호 = A.회원번호 
                      AND AA.후기순번 = A.후기순번
                      AND AA.후기등록일 BETWEEN C.이벤트후기작성시작일 AND C.이벤트후기작성종료일
                      AND ROWNUM <=1),0,1,0) AS "미작성건수"
          ,TO_CHAR(A.SBSC_SGT_DTIME, 'YYYY-MM-DD') "응모일자"
    FROM 이벤트응모 A
        ,회원정보 B
        ,이벤트마스터 c
    WHERE A.EVT_NO = '00000000000030'
      AND A.회원번호 = B.회원번호
      AND A.이벤트번호 = C.이벤트번호
    )
  WHERE (:미작성횟수 = 미작성횟수 OR :미작성횟수 IS NULL)--미작성횟수 '1' 입력시 미작성 건만, 아무것도 입력안하면 전체

 


by DJ메탈짱™ [2016.12.29 14:58:19]

설명이 부족해서 죄송합니다. 추측이 다 맞으셨어요 (__) 꾸벅

감사합니다. 힌트를 얻었어요~ ㅎ 

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