2016-12-16 2 views
2

Ich habe ein Problem beim Erstellen einer Abfrage mit Pivot. Ich habe eine Tabelle, die 4 SpaltenOrakel Sql Pivot gruppiert meine Daten

col1 | col2 | col3 | col4 
1 | 1 | 5 | 2 
1 | 2 | 6 | 2 
1 | 3 | 7 | 2 
1 | 4 | 8 | 2 
1 | 1 | 5 | 2 
1 | 2 | 6 | 2 
1 | 3 | 7 | 2 
1 | 4 | 8 | 2 

ich Pivot bin mit haben, so kann ich Ausgabeelemente wie folgt aus:

col1 | col2 | col3 

Hier ist die Abfrage:

select col1, "1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24" 
from (
    select col1, col2, col3 
    from tbl 
    where col4 = 2 
) 
pivot 
(
    max(col2) 
    for col3 
    in (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24) 
) 

Der Code funktioniert die ganze Zeit außer wenn ich 2 identische Datensätze in der Datenbank habe. Es gruppiert sich dann und wird als eins angezeigt. Ich möchte es als 2 separate, aber gleiche Zeilen ausgeben. Die einfachste Lösung, die ich sehe, ist, dass ich eine andere Spalte in die Tabelle einfüge, die als ID funktionieren würde. Aber weil ich diese ID nirgendwo sonst verwenden werde, denke ich, dass es irgendwie sinnlos ist und es auch einfacher und weniger Arbeit wäre, den Code ein wenig zu ändern.

Der obige Code gibt dies:

1 5 6 7 8 9 

und ich würde dies mag:

1 5 6 7 8 9 
1 5 6 7 8 9 
+0

Sie haben Recht; Sie benötigen eine zusätzliche Spalte, um die Teilmengen der Daten zu bestimmen. Dies könnte nur eine row_number() sein, die Sie verwenden, um alle Zeilen in "erste Zeile der (col1, col2, col3) Werte, zweite Zeile der (col1, col2, col3) Werte usw." – Boneist

+0

Bitte wählen Sie ein DBMS (Sql Server oder Oracle) oder Ihre Frage gilt für beide? –

+0

@Boneitist Ja scheint, das ist die beste Idee. – Kristjan

Antwort

0

eine weitere Spalte Fügen Sie die ROW_NUMBER() analytische Funktion mit:

SELECT * 
FROM (SELECT t.*, 
       ROW_NUMBER() OVER (PARTITION BY col1, col2, col3, col4 
            ORDER BY ROWNUM) AS rn 
     FROM tbl t) 
PIVOT (MAX(Col2) FOR Col3 IN (1,2,3,4,5,6,7,8,9,10 /* ..., 24*/)); 

Ausgabe

COL1 COL4 RN 1 2 3 4 5 6 7 8 9 10 
---- ---- -- - - - - - - - - - -- 
    1 2 1   1 2 3 4 
    1 2 2   1 2 3 4 
+0

danke für deine antwort. Ich habe das Problem gelöst, indem ich der Tabelle eine weitere Spalte hinzugefügt habe, die als ID funktioniert. und dann funktioniert meine Lösung. Danke trotzdem – Kristjan