초보웹개발자 쿼리문 도와주세요 ㅠㅠ 0 3 910

by 웹린이 [2021.11.29 13:16:39]


안녕하세요 초보개발자입니다

현재 아래와 같이 설문조사 프로그램을 개발하고 있는데요

 

첨부 이미지

첨부 이미지

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 

홍길동 

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  여

 

 

현재 열은 '닉네임' , '원하는 날짜', '성별'이지만 

매 설문조사마다 '걷기운동하는목적' 등 위의 열들이 바뀌는 값들인데 어떻게 만들어야할지 감이 안옵니다ㅠㅠㅠ

 

 

 어떻게 쿼리문을 만들어야할까요...?ㅠㅠ

by 마농 [2021.11.29 14:05:23]
-- 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
;

 


by 웹린이 [2021.11.29 16:07:48]

혹시 하나의 쿼리문으로는 불가능할까요..?ㅠㅠ 


by 마농 [2021.11.29 16:33:36]

SQL에서는 고정 컬럼에 행을 늘리는 것은 가능하지만, 가변 칼럼은 불가능합니다.
가변 컬럼을 구현하려면 SQL 영역이 아닌 프로그램 영역에서 동적SQL 로 구현하셔야 합니다.

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