초보초보 입니다.. 조언좀 얻으려고 글남겨봅니다.
게시판과 이벤트 응모 테이블이 있는데.
예) 이벤트 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.후기등록일
이벤트후기작성시작일,종료일이 이벤트마스터에 있는 건가요?
이벤트별, 회원별로 후기는 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' 입력시 미작성 건만, 아무것도 입력안하면 전체