2011-10-11 2 views
1

포스트그레스에서 크로스 탭 기능을 사용하고 있습니다. 기본 SQL은 다음과 같습니다crosstab() 쿼리 이동 열

select distinct 
     o_location, 
     co_name, 
     o_date, 
     o_ndate, 
     o_day, 
     o_hour, 
     o_type 
    from outputs_txt 
    left join courses on o_course = co_foreign 
    left join locations on o_location = l_code 
where o_date = '2011-10-10' 
order by o_hour 

내 크로스 탭 쿼리는 문제는 결과가 모두 왼쪽으로 이동할 점이다

SELECT * 
    FROM crosstab(
'SELECT DISTINCT 
     COALESCE(o_location, '''') 
     ,o_hour AS hour 
     ,c.co_name 
    FROM outputs_txt AS d 
    LEFT JOIN courses AS c 
    on o_course = c.co_foreign 
    LEFT JOIN locations as a 
    on o_location = a.l_code 
    WHERE d.o_date = ''2011-10-10''' 
) 
AS ct(
o_location varchar 
,hour_0 varchar 
,hour_1 varchar 
,hour_2 varchar 
,hour_3 varchar 
,hour_4 varchar 
,hour_5 varchar 
,hour_6 varchar 
,hour_7 varchar 
,hour_8 varchar 
,hour_9 varchar 
,hour_10 varchar 
,hour_11 varchar 
,hour_12 varchar 
,hour_13 varchar 
,hour_14 varchar 
,hour_15 varchar 
,hour_16 varchar 
,hour_17 varchar) 

입니다.
예를 들어 한 위치의 코스가 hour_8에 표시되어야하는 경우 hour_0으로 표시됩니다.
모든 지역의 모든 과정을 대상으로합니다. 그들은 모두 왼쪽으로 정렬됩니다.

어디로 잘못 가고 있습니까?

답변

1

샘플 데이터가 없으므로 나는 추측 할 수 있습니다. 다음은 나를 공격하는 것입니다.
크로스 탭 기능에는 ORDER BY이 없습니다. 당신은 당신이 o_hour로 주문해야 첫번째 hour_0을 원하는 경우에

SELECT * 
    FROM crosstab(
'SELECT DISTINCT 
     COALESCE(o_location, '''') 
     ,o_hour AS hour 
     ,c.co_name 
    FROM outputs_txt AS d 
    LEFT JOIN courses AS c ON o_course = c.co_foreign 
    LEFT JOIN locations as a ON o_location = a.l_code 
    WHERE d.o_date = ''2011-10-10'' 
    ORDER BY 1,2' 
) 
AS ct(
o_location varchar 
,hour_0 varchar 
,hour_1 varchar 
,hour_2 varchar 
,hour_3 varchar 
,hour_4 varchar 
,hour_5 varchar 
,hour_6 varchar 
,hour_7 varchar 
,hour_8 varchar 
,hour_9 varchar 
,hour_10 varchar 
,hour_11 varchar 
,hour_12 varchar 
,hour_13 varchar 
,hour_14 varchar 
,hour_15 varchar 
,hour_16 varchar 
,hour_17 varchar) 

: 나는 하나를 추가했습니다. 나는 인용 manual on crosstab functions :

SQL 쿼리는 항상, 즉, 입력 행이 올바르게 정렬되어 있습니다 을 보장하기 위해 1, 2에 의해 순서를 지정 함께 올바르게 가져 주문하는 같은 ROW_NAME에 값한다 실제로 행 내에 있습니다.

+0

주문에 의한 영향은없는 것으로 보입니다. – Yebach

+0

주문에 의한 영향은없는 것 같습니다. 내가 얻을 o_location \t hour_0 \t hour_1 \t hour_2 \t hour_3 \t hour_4 \t ...... \t hour_17 .... \t SUB1 \t SUB1 \t SUB1 \t SUB2 \t SUB3 \t '' \t subX \t subX \t subY \t subY \t ''\t '' 언제 내가 좋아해야합니까? o_location,223,210 hour_0 \t hour_1 hour_2 \t \t \t hour_3 hour_4 hour_5 \t \t \t hour_6 ...... \t hour_17 .... \t \t \t SUB1 SUB1 SUB1 \t \t \t \t SUB2 SUB3 \t \t subX subX \t \t \t \t subY \t subY \t subY – Yebach

+0

@Yebach : 올바른 형식으로 질문을 편집하십시오. 너무 해독하기가 어렵습니다. –