2015-01-05 5 views
0

SQL을 너무 강하게 사용하지 않습니다.열 값을 기반으로 열 만들기

month  | math | english 
------------+-------+------------ 
12/1/2014 | 42 | 137 
1/1/2015 | 137 | 76  
2/1/2015 | 139 | 79  
3/1/2015 | 143 | 83  

"수학"과 : 내가 원하는 결과는 다음과 같습니다 출력입니다 다른 코스는 코스 관리 시스템의 각 달에 걸릴 수있는 학생의 능력을 보여주는 테이블을 만들도록 요청했습니다 "영어"는 course_kind이고, course_kind은 테이블 course_capacities의 열입니다. 열의 다양한 값을 기반으로 열을 만들 수 있습니까? 는 SQL 여기

course_kind | month | capacity 
-------------+------------+---------- 
math   | 2015-01-01 |  47 
math   | 2015-02-01 |  43 
math   | 2015-03-01 |  43 
math   | 2015-04-01 |  45 
math   | 2015-05-01 |  46 
math   | 2015-06-01 |  46 
math   | 2015-07-01 |  46 
math   | 2015-08-01 |  46 
math   | 2015-09-01 |  47 
math   | 2015-10-01 |  47 
math   | 2015-11-01 |  47 
math   | 2015-12-01 |  47 
english  | 2015-01-01 |  97 
english  | 2015-01-01 |  73 
english  | 2015-02-01 |  76 
english  | 2015-03-01 |  79 
english  | 2015-04-01 |  83 
english  | 2015-05-01 |  83 
english  | 2015-06-01 |  87 
english  | 2015-07-01 |  89 
english  | 2015-08-01 |  91 
english  | 2015-09-01 |  93 
english  | 2015-10-01 |  97 
english  | 2015-11-01 |  97 
english  | 2015-12-01 |  97 

것 :

내 현재의 SQL 최적 미만이 결과를 생산

SELECT 
    course_capacities.course_kind, 
    monthly_course_capacities.month, 
    monthly_course_capacities.capacity 
FROM course_capacities 
    INNER JOIN monthly_course_capacities ON course_capacities.id = monthly_course_capacities.course_capacity_id 
    ORDER BY course_capacities.course_kind ASC, 
    monthly_course_capacities.month ASC; 

답변

3

당신이 case based aggregation을 사용할 수 있습니다, 사례 course_kind 열 값에 알려져있다 및 제한됩니다 , 다른 현명한, 동적 쿼리를 작성해야합니다.

SELECT 
    monthly_course_capacities.month, 
    max(case when course_capacities.course_kind ='math' then capacity end) as math, 
    max(case when course_capacities.course_kind ='english' then capacity end) as english, 
FROM course_capacities 
INNER JOIN monthly_course_capacities ON course_capacities.id = monthly_course_capacities.course_capacity_id 
GROUP BY monthly_course_capacities.month 
관련 문제