2015-04-29 2 views
1

Я пытаюсь создать запрос для переноса строк в столбцы с помощью функции PIVOT.Oracle SQL Developer: как переносить строки в столбцы с помощью функции PIVOT

Это contact стол я хочу перенести в ряды:

PARTYID CONTACTTEXT CONTACTTYPECD 
---------- ------------ ------------- 
     100 0354441010    1 
     100 0355551010    2 
     100 0428105789    3 
     100 [email protected]    4 

Мой предполагаемый результат:

PARTYID PHONE  FAX   MOBILE  EMAIL  
---------- ------------ ------------ ------------ ------------ 
     100 0354441010 0355551010 0428105789 [email protected] 

Мой запрос:

SELECT * FROM 
    ( 
    SELECT partyId, contacttext, contacttypecd 
    FROM CONTACT 
    WHERE partyId = 100; 
) 
    PIVOT ( 
    MAX(contacttext) 
    FOR contacttypecd in (1 Phone, 2 Fax, 3 Mobile, 4 Email)); 

Ошибки я получаю:

Error starting at line 9 in command: 
FOR contacttypecd in (1 Phone, 2 Fax, 3 Mobile, 4 Email)) 
Error report: 
Unknown Command 

Причина моей проблемы состояла в том, что моя версия базы данных Oracle (Oracle9i) не поддерживала функцию PIVOT. Вот как это сделать по-другому:

SELECT PartyCD 
    ,MAX(DECODE(t.contacttypecd, 1, t.contacttext)) Phone 
    ,MAX(DECODE(t.contacttypecd, 2, t.contacttext)) Fax 
    ,MAX(DECODE(t.contacttypecd, 3, t.contacttext)) Mobile 
    ,MAX(DECODE(t.contacttypecd, 4, t.contacttext)) Email 
FROM 
    (
    SELECT partyid, contacttext, contacttypecd 
    FROM CONTACT 
    WHERE partyid = 100 
) t 
GROUP BY PartyID 

ответ

7

У вас есть шальная запятой в своем заявлении, после того, как:

WHERE partyId = 100; 

Удалить, что сделать это:

SELECT * FROM 
    ( 
    SELECT partyId, contacttext, contacttypecd 
    FROM CONTACT 
    WHERE partyId = 100 
) 
    PIVOT ( 
    MAX(contacttext) 
    FOR contacttypecd in (1 Phone, 2 Fax, 3 Mobile, 4 Email)); 

    PARTYID PHONE  FAX   MOBILE  EMAIL  
---------- ------------ ------------ ------------ ------------ 
     100 0354441010 0355551010 0428105789 [email protected] 

Это рассматривается как несколько утверждений; первый неполный, поскольку он не имеет закрывающей круглой скобки (поэтому получает ORA-00907), второй начинается с этой скобки и получает сообщение об ошибке, а затем каждая последующая строка получает ту же ошибку. Кажется, вы только просматриваете последнюю сообщенную ошибку - обычно гораздо полезнее начать с первой ошибки, очистить ее, а затем перейти к следующей, если она все еще существует.

+0

Я удалил точку с запятой после строки WHERE party = 100 и теперь имеет следующую ошибку: 'ORA-00933: команда SQL не выполнена должным образом' ' 00933. 00000 - «SQL-команда не выполнена должным образом» ' ' * Причина: ' ' * Действие: ' ' Ошибка в строке: 7 Столбец: 8' – user1309226

+0

Нашел причину моей проблемы: моя версия базы данных Oracle - это Oracle9i, которая не поддержка функции PIVOT. – user1309226