2014-10-20 6 views
0

Здесь объясняю мою проблему с образцом.Кросс-таблицы в нескольких столбцах

Его Мой пример запроса.

SELECT * FROM public.crosstab(
$$VALUES ('na','sales', 1, 100) 
,('na','sales1', 1, 1000) 
, ('ba','sales', 2, 300) $$ 
,$$VALUES ('1'), ('2')$$ 
) AS pivot (na text,n text, co11 int, col2 int) 

Это Производят Результат как этот

Na N  Col1 Col2 
na sales 1000 
ba sales  300 

Но я хочу, чтобы как этот

Na N Col1 Col2 
na sales 100 
na sales1 1000 
ba sales   300 

Как получить, что ?. Почему этот запрос дает результат?

Я использую PostGreSQL 9,3

ответ

0

Вы нашли ответ: отсутствующий ORDER BY положение. При использовании двухпараметрической формы crosstab() можно использовать только ORDER BY 1. Для формы однопараметрическом он должен был бы быть

ORDER BY 1,2 

Который никогда не помешает, даже с формой два параметра. The manual instructs:

На практике SQL-запрос всегда должен указать ORDER BY 1,2 для обеспечения , что входные строки правильно упорядоченный

Детали:

0

Я попытался, как это она производит правильный результат

SELECT * FROM public.crosstab(
    $$VALUES ('na-sales', 'na','sales', 1, 100) 
    ,('na-sales1', 'na','sales1', 1, 1000) 
    , ('ba-sales', 'ba','sales', 2, 300) order by 1,2 $$ 
,$$VALUES ('1'), ('2')$$ 
    ) AS pivot (t text, n text,na text, co11 int, col2 int) 

Результат

t   N Na col1 col2 
    na-sales na sales 100  
    na-sales1 na sales1 1000 
    ba-sales ba sales   300 
Смежные вопросы