어제 글을 올렸는데 급하게 올려서 그런지 제가 빼먹은 것도 있어서 다시 올립니다.
A1 테이블은 구지 사용안해도?? 되지만??
A2,A3 테이블은 꼭 조인해서 사용했으면 합니다.
999는 기타입니다.
결과도 맨 하단에 추가했습니다.
혹시 몰라 엑셀로 첨부했으니 보기 힘드신 분들은 엑셀로 다운받아서 봐도 될듯합니다.
추가적으로 쿼리문에 대한 주석도 작성해주시면 감사하겠습니다. ^^
A1 테이블(설문조사 관리) | A2 테이블(설문 문항 테이블) | A3테이블(설문 답 체크 테이블) | |||||||||||||
필드명 | SURVEY_NO | QUESTION_NO | ETC | 필드명 | SURVEY_NO | QUESTION_NO | SURVEY_QUESTIONS | SURVEY_NAME | 필드명 | SURVEY_NO | QUESTION_NO | SURVEY_ANSWER | ANSWER | ||
설명 | 설문조사 번호 | 질문 번호 | 기타여부 | 설명 | 설문조사 번호 | 질문 번호 | 설문문항번호 | 설문문항내용 | 설명 | 설문조사 번호 | 질문 번호 | 질문 답 | 답변자 | ||
data | 50 | 1 | Y | data | 50 | 1 | 1 | 매우좋음 | data | 50 | 1 | 1 | 홍길동 | ||
50 | 2 | N | 50 | 1 | 2 | 좋음 | 50 | 2 | 3 | 홍길동 | |||||
50 | 3 | N | 50 | 1 | 3 | 보통 | 50 | 3 | 1|3 | 홍길동 | |||||
50 | 4 | Y | 50 | 1 | 4 | 나쁨 | 50 | 4 | 1|3|5 | 홍길동 | |||||
50 | 1 | 5 | 매우나쁨 | 50 | 1 | 2 | 둘리 | ||||||||
50 | 2 | 1 | 매우좋음 | 50 | 2 | 4 | 둘리 | ||||||||
50 | 2 | 2 | 좋음 | 50 | 3 | 1|2|3 | 둘리 | ||||||||
50 | 2 | 3 | 보통 | 50 | 4 | 1|2|3|4 | 둘리 | ||||||||
50 | 2 | 4 | 나쁨 | 50 | 1 | 999 | 또치 | ||||||||
50 | 2 | 5 | 매우나쁨 | 50 | 2 | 5 | 또치 | ||||||||
50 | 3 | 1 | 빌라 | 50 | 3 | 1|2 | 또치 | ||||||||
50 | 3 | 2 | 원룸 | 50 | 4 | 3|5|999 | 또치 | ||||||||
50 | 3 | 3 | 아파트 | ||||||||||||
50 | 3 | 4 | 투룸 | ||||||||||||
50 | 3 | 5 | 빌딩 | ||||||||||||
50 | 4 | 1 | 자짱면 | ||||||||||||
50 | 4 | 2 | 짬뽕 | ||||||||||||
50 | 4 | 3 | 탕수육 | ||||||||||||
50 | 4 | 4 | 볶음밥 | ||||||||||||
50 | 4 | 5 | 라면 |
1번 질문의 결과 | 2번 질문의 결과 | |||||||||
설문조사번호 | 질문 번호 | 설문문항번호 | 설문문항내용 | 답변 수 | 설문조사번호 | 질문 번호 | 설문문항번호 | 설문문항내용 | 답변 수 | |
50 | 1 | 1 | 매우좋음 | 1 | 50 | 2 | 1 | 매우좋음 | 0 | |
50 | 1 | 2 | 좋음 | 1 | 50 | 2 | 2 | 좋음 | 0 | |
50 | 1 | 3 | 보통 | 0 | 50 | 2 | 3 | 보통 | 1 | |
50 | 1 | 4 | 나쁨 | 0 | 50 | 2 | 4 | 나쁨 | 1 | |
50 | 1 | 5 | 매우나쁨 | 0 | 50 | 2 | 5 | 매우나쁨 | 1 | |
50 | 1 | 999 | 기타 | 1 | ||||||
3번 질문의 결과 | 4번 질문의 결과 | |||||||||
설문조사번호 | 질문 번호 | 설문문항번호 | 설문문항내용 | 답변 수 | 설문조사번호 | 질문 번호 | 설문문항번호 | 설문문항내용 | 답변 수 | |
50 | 3 | 1 | 빌라 | 3 | 50 | 4 | 1 | 자짱면 | 2 | |
50 | 3 | 2 | 원룸 | 1 | 50 | 4 | 2 | 짬뽕 | 1 | |
50 | 3 | 3 | 아파트 | 3 | 50 | 4 | 3 | 탕수육 | 3 | |
50 | 3 | 4 | 투룸 | 0 | 50 | 4 | 4 | 볶음밥 | 1 | |
50 | 3 | 5 | 빌딩 | 0 | 50 | 4 | 5 | 라면 | 2 | |
50 | 4 | 기타(999) | 1 |
WITH a1 AS ( SELECT 50 survey_no, 1 question_no, 'Y' etc FROM dual UNION ALL SELECT 50, 2, 'N' FROM dual UNION ALL SELECT 50, 3, 'N' FROM dual UNION ALL SELECT 50, 4, 'Y' FROM dual ) , a2 AS ( SELECT 50 survey_no, 1 question_no, 1 survey_questions, '매우좋음' survey_name FROM dual UNION ALL SELECT 50, 1, 2, '좋음' FROM dual UNION ALL SELECT 50, 1, 3, '보통' FROM dual UNION ALL SELECT 50, 1, 4, '나쁨' FROM dual UNION ALL SELECT 50, 1, 5, '매우나쁨' FROM dual UNION ALL SELECT 50, 2, 1, '매우좋음' FROM dual UNION ALL SELECT 50, 2, 2, '좋음' FROM dual UNION ALL SELECT 50, 2, 3, '보통' FROM dual UNION ALL SELECT 50, 2, 4, '나쁨' FROM dual UNION ALL SELECT 50, 2, 5, '매우나쁨' FROM dual UNION ALL SELECT 50, 3, 1, '빌라' FROM dual UNION ALL SELECT 50, 3, 2, '원룸' FROM dual UNION ALL SELECT 50, 3, 3, '아파트' FROM dual UNION ALL SELECT 50, 3, 4, '투룸' FROM dual UNION ALL SELECT 50, 3, 5, '빌딩' FROM dual UNION ALL SELECT 50, 4, 1, '자짱면' FROM dual UNION ALL SELECT 50, 4, 2, '짬뽕' FROM dual UNION ALL SELECT 50, 4, 3, '탕수육' FROM dual UNION ALL SELECT 50, 4, 4, '볶음밥' FROM dual UNION ALL SELECT 50, 4, 5, '라면' FROM dual ) , a3 AS ( SELECT 50 survey_no, 1 question_no, '1' survey_answer, '홍길동' answer FROM dual UNION ALL SELECT 50, 2, '3' , '홍길동' FROM dual UNION ALL SELECT 50, 3, '1|3' , '홍길동' FROM dual UNION ALL SELECT 50, 4, '1|3|5' , '홍길동' FROM dual UNION ALL SELECT 50, 1, '2' , '둘리' FROM dual UNION ALL SELECT 50, 2, '4' , '둘리' FROM dual UNION ALL SELECT 50, 3, '1|2|3' , '둘리' FROM dual UNION ALL SELECT 50, 4, '1|2|3|4', '둘리' FROM dual UNION ALL SELECT 50, 1, '999' , '또치' FROM dual UNION ALL SELECT 50, 2, '5' , '또치' FROM dual UNION ALL SELECT 50, 3, '1|2' , '또치' FROM dual UNION ALL SELECT 50, 4, '3|5|999', '또치' FROM dual ) SELECT a0.survey_no, a0.question_no, a0.survey_questions, a0.survey_name , COUNT(a3.survey_answer) survey_answer_cnt -- 답변 카운트 FROM (-- a2 의 항목에 a1 이 기타인 경우 999 추가 SELECT survey_no, question_no, survey_questions, survey_name FROM a2 UNION ALL SELECT survey_no, question_no, 999 survey_questions, '기타' survey_name FROM a1 WHERE etc = 'Y' ) a0 LEFT OUTER JOIN a3 -- a3 와 아우터 조인 ON a0.survey_no = a3.survey_no AND a0.question_no = a3.question_no AND INSTR('|'||a3.survey_answer||'|', '|'||a0.survey_questions||'|') > 0 -- 문항 번호 있는지? WHERE a0.survey_no = 50 -- 설문번호 조건 -- AND a0.question_no = 2 -- 질문번호 조건 GROUP BY a0.survey_no, a0.question_no, a0.survey_questions, a0.survey_name -- 그룹핑 ORDER BY a0.survey_no, a0.question_no, a0.survey_questions -- 정렬 ;