안녕하세요 초보개발자입니다
현재 아래와 같이 설문조사 프로그램을 개발하고 있는데요
db는 위와 같이 설문조사 테이블과 지원자 테이블로 구성되어있습니다
(*설문조사 질문들이 유동적이여서 survey_detail테이블에서 매 양식마다 바뀌게될 질문항목들을 저장합니다)
각각 테이블에 들어갈 값들은 아래와 같은데요
1. form_default
seq |
title |
content |
1 | 2021 연말 워크숍 참가신청 | 연말워크숍이 열립니다~ |
2 | 2021 고객만족도 설문조사 | 고객만족도를 하고있습니다.. |
3 | 걷기운동 동참하기 | .. |
2. form_detail
seq | form_seq | form_type | form_label | form_name | form_order |
1 | 2 | text | 닉네임 | textbuilder-12390 | 1 |
2 | 2 | date | 원하는날짜 | datebuilder-d1231 | 3 |
3 | 2 | radio | 성별선택 | radiobuilder-12313 |
2 |
4 | 3 | text | 걷기운동하는목적 | textbuilder-12390 | 1 |
제가 jquery formbuilder라는 플러그인을 사용하고 있어서 form-name은 해당 플러그인이 생성해주는 네임값이 됩니다
( 같은 form_seq안에는 중복된 값이 나올수 없지만, 다른 form_Seq에서는 중복될수 있습니다)
3. application_default
seq | form_seq | name | write_date |
1 | 2 |
홍길동 |
2021-11-28 |
2 | 2 | 홍길순 | 2021-11-29 |
3 | 2 | 김파란 | 2021-11-29 |
4 | 3 | 김걷기 | 2021-12-01 |
5 | 3 | 김수지 | 2021-12-01 |
4. application_detail
seq | application_seq | form_name | form_value |
1 | 3 | textbuilder-12390 | 파란하늘 |
2 | 3 | datebuilder-d1231 | 2021-12-05 |
3 | 3 | radiobuilder-12313 | 남 |
4 | 2 | textbuilder-12390 | gilson45 |
...
그런데 하나의 설문조사에 지원자들이 어떤 폼에 어떤 값을 넣었는지 아래와 같이 조회하고싶을때 쿼리를 어떻게 해야할지 멘붕이 와서요 ㅠㅠ
<2021 고객만족도 설문조사> 지원자
이름 | 닉네임 | 원하는날짜 | 성별 |
김파란 | 파란하늘 | 2021-12-05 | 남 |
홍길동 | hong-gil | 2021-12-24 | 남 |
홍길순 | gilson45 | 2021-12-17 | 여 |
현재 열은 '닉네임' , '원하는 날짜', '성별'이지만
매 설문조사마다 '걷기운동하는목적' 등 위의 열들이 바뀌는 값들인데 어떻게 만들어야할지 감이 안옵니다ㅠㅠㅠ
어떻게 쿼리문을 만들어야할까요...?ㅠㅠ
-- 1. 피벗 대상 명칭 가져오기 -- SELECT form_name , form_label FROM form_detail WHERE form_seq = 2 ORDER BY form_order ; -- 2. 1번 쿼리 결과를 이용해 아래 쿼리의 반복 구문을 동적으로 완성 -- SELECT a.form_seq , a.seq , a.name -- 여기서부터 -- -- , MIN(CASE b.form_name WHEN '*** form_name ***' THEN b.form_value END) "*** form_label ***" , MIN(CASE b.form_name WHEN 'textbuilder-12390' THEN b.form_value END) "닉네임" , MIN(CASE b.form_name WHEN 'radiobuilder-12313' THEN b.form_value END) "성별선택" , MIN(CASE b.form_name WHEN 'datebuilder-d1231' THEN b.form_value END) "원하는날짜" -- 여기까지 -- FROM application_default a INNER JOIN application_detail b ON a.seq = b.application_seq WHERE a.form_seq = 2 GROUP BY a.form_seq, a.seq, a.name ;