2014-02-28 4 views
9

Ich versuche, PIVOT in Oracle zu verwenden, und ich bekomme ein seltsames Ergebnis. Es ist wahrscheinlich nur eine Option, die ich einstellen muss, aber was ich über Oracle/SQL weiß, könnte ich in dieses Kommentarfeld passen.Die Oracle Pivot-Abfrage enthält Spalten mit Anführungszeichen um die Spaltennamen. Was?

Hier ist ein Beispiel von meiner Anfrage:

with testdata as 
(
    select 'Fred' First_Name, 10 Items from dual 
    union 
    select 'John' First_Name, 5 Items from dual 
    union 
    select 'Jane' First_Name, 12 Items from dual 
    union 
    select 'Fred' First_Name, 15 Items from dual 
) 

select * from testdata 
pivot (
    sum(Items) 
    for First_Name 
    in ('Fred','John','Jane') 

Die Ergebnisse kommen, wie ich mit Ausnahme der Spaltennamen erwartet haben einfache Anführungszeichen um sie (Bild von Toad - wenn ich die Zitate nach Excel exportieren, um Excel mitreißen):

Toad Data Grid

Wie werde ich die einfacheren Anführungszeichen um die Spaltennamen wieder los? Ich versuchte, sie aus in der „in“ -Klausel zu nehmen und ich erhalte eine Fehlermeldung:

in (Fred,John,Jane) 

Error message

Ich habe auch versucht die einfachen Anführungszeichen mit doppelten Anführungszeichen zu ersetzen und bekam den gleichen Fehler. Ich weiß nicht, ob dies eine Oracle-Option ist, die ich vor dem Ausführen meiner Abfrage oder einer Toad-Sache setzen/löschen muss.

+0

Könnte eine Kröte Problem sein, anstatt eine SQL ein. – Mihai

+6

Sie können Spaltenaliasnamen in Ihrem 'IN' angeben. Weitere Informationen finden Sie in der [oracle docs] (http://www.oracle.com/technetwork/articles/sql/11g-pivot-097235.html) – Taryn

+0

My Duh. Ich habe die Oracle Pivot-Dokumentation zwei Tage lang gelesen und irgendwie habe ich das übersehen. Danke @bluefeet ... –

Antwort

27

Sie können Aliase für die neuen Spalten in der IN-Klausel angeben.

select * from testdata 
pivot (
     sum(Items) 
     for First_Name 
     in ('Fred' as fred,'John' as john,'Jane' as jane) 
    ) 

und auch für Ihre Aggregat Klausel, die, wenn Sie mehrere Klauseln notwendig ist, haben ..

select * from testdata 
pivot (
    sum(Items) itmsum, 
    count(Items) itmcnt 
    for First_Name 
    in ('Fred' as fred,'John' as john,'Jane' as jane) 
    ) 

kehrt

FRED_ITMSUM FRED_ITMCNT JOHN_ITMSUM JOHN_ITMCNT JANE_ITMSUM JANE_ITMCNT 
----------- ----------- ----------- ----------- ----------- ----------- 
     25   2   5   1   12   1 
Verwandte Themen