설문조사 프로그램 짜다가 마지막 결과 통계 쿼리문 남았는데 만들다가 박터져서 구루비에 헬프 요청 합니다.
아래와 같이 데이터가 있다는 가정하에 부탁드립니다.
999는 기타입니다.
결과도 맨 하단에 추가했습니다.
혹시 몰라 엑셀로 첨부했으니 보기 힘드신 분들은 엑셀로 다운받아서 봐도 될듯합니다.
추가적으로 쿼리문에 대한 주석도 작성해주시면 감사하겠습니다. ^^
필드명,설명 및 DATA
A1 테이블(설문조사 관리) | A2 테이블(설문 문항 테이블) | A3테이블(설문 답 체크 테이블) | ||||||||||||
필드명 | SURVEY_NO | QUESTION_NO | ETC | 필드명 | SURVEY_NO | QUESTION_NO | SURVEY_QUESTIONS | 필드명 | 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 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | WITH A3 ( "설문조사번호" , "질문번호" , SANS) AS ( SELECT 50,1, '1' 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 * FROM ( SELECT "설문조사번호" , "질문번호" , SUM (REGEXP_COUNT(SANS, 1)) AS CNT1 , SUM (REGEXP_COUNT(SANS, 2)) AS CNT2 , SUM (REGEXP_COUNT(SANS, 3) ) AS CNT3 , SUM (REGEXP_COUNT(SANS, 4) ) AS CNT4 , SUM (REGEXP_COUNT(SANS, 5) ) AS CNT5 , SUM (REGEXP_COUNT(SANS, 999)) AS CNT999 FROM A3 GROUP BY "설문조사번호" , "질문번호" ) UNPIVOT ( "답변수" FOR "질문답" IN ( CNT1 AS '1' ,CNT2 AS '2' ,CNT3 AS '3' ,CNT4 AS '4' ,CNT5 AS '5' ,CNT999 AS '기타(999)' ) ) WHERE NOT ( 질문답 = '기타(999)' AND 답변수 = 0 ) ORDER BY "설문조사번호" , "질문번호" , "질문답" |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | 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 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 , COUNT (a3.survey_answer) survey_answer_cnt -- 답변 카운트 FROM ( -- a2 의 항목에 a1 이 기타인 경우 999 추가 SELECT survey_no, question_no, survey_questions FROM a2 UNION ALL SELECT survey_no, question_no, 999 survey_questions 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 -- 설문번호 조건 GROUP BY a0.survey_no, a0.question_no, a0.survey_questions -- 그룹핑 ORDER BY a0.survey_no, a0.question_no, a0.survey_questions -- 정렬 ; |