데이터 쿼리를 어떻게 하여야할지 잘 모르겠습니다. 0 4 815

by 황희성 [SQL Query] [2017.05.09 11:44:43]


안녕하세요.

예약현황 판을 만드는데 쿼리로 어느정도 형태를 쿼리로 가져와서 표현하고 싶은데 어떻게 해야할지 도무지 감이 안와서 이렇게 도움 요청드립니다.

<강사>

강사명
이순신
김유신
계백
장보고

<강습시간>

강의시간
09시
10시
11시
12시

<강습레벨>

강습레벨
초급
중급
상급

<예약현황>

강사명 강의시간 강습레벨
이순신 09시 초급
이순신 14시 중급
김유신 10시 초급
김유신 12시 중급
김유신 14시 고급
계백 11시 중급
계백 14시 초급
계백 16시 중급
장보고 11시 고급

위와같이 테이블 데이터가 들어가 있다고 가정하고 쿼리로 아래와 같은 형태 또는 비슷한 형태로 데이터셋을 가져오고 싶습니다. (현황표 모양)

  09시 10시 11시 12시 13시 14시 15시 16시 17시
이순신 초급 null null null null 중급 null null null
김유신 null 초급 null 중급 null 고급 null null null
계백 null null 중급 null null 초급 null 중급 null
장보고 null null 고급 null null null null null null

 

강습시간과 강사는 유동적인 데이터로 레코드가 늘어날수도 줄어들수도 있습니다. 강습레벨은 고정입니다.

이런 상태에서 원하는 표형태로 쿼리를 해올수 있을까요?

불가능하다면 보통 어떤 식으로 처리를 할수 있는지 조언 부탁드립니다.

감사합니다.

 

by 우리집아찌 [2017.05.09 16:49:10]

유동적인건 dynamic query 사용하셔야 할듯하고

시간은 고정이니 24시간 고정하시고 만드시면 될듯합니다.


by 황희성 [2017.05.10 09:06:14]

답변감사합니다


by 마농 [2017.05.10 08:48:19]

옆으로 나열하는 부분은 고정만 가능합니다.
가변으로 하려면 동적쿼리를 이용하셔야 합니다.

WITH t AS
(
SELECT '이순신' nm, '09' tm, '초급' lv FROM dual
UNION ALL SELECT '이순신', '14', '중급' FROM dual
UNION ALL SELECT '김유신', '10', '초급' FROM dual
UNION ALL SELECT '김유신', '12', '중급' FROM dual
UNION ALL SELECT '김유신', '14', '고급' FROM dual
UNION ALL SELECT '계백'  , '11', '중급' FROM dual
UNION ALL SELECT '계백'  , '14', '초급' FROM dual
UNION ALL SELECT '계백'  , '16', '중급' FROM dual
UNION ALL SELECT '장보고', '11', '고급' FROM dual
)
SELECT *
  FROM t
 PIVOT (MIN(lv) FOR tm IN ( '09' "09"
                          , '10' "10"
                          , '11' "11"
                          , '12' "12"
                          , '13' "13"
                          , '14' "14"
                          , '15' "15"
                          , '16' "16"
                          , '17' "17"
                          ) )
;

 


by 황희성 [2017.05.10 09:06:25]

답변감사합니다

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