Problem mit Oracle 11 PIVOT: Wenn ich Folgendes ausführe, bekomme ich normalisierte Ergebnisse mit Daten in allen Feldern F2-F4, wo Daten vorhanden sind; F1 ist der Schlüssel so immer Daten hat:Lossy JOIN bei Verwendung von PIVOT in Oracle
select t1.F1, t2.F2, t2.F3, t2.F4
from schema.t1,
schema.t2
where
t1.F1 = t2.F1 (+)
Jetzt gehe ich Oracles eigene Achse gedreht verwenden, um alle Felder F2 zu verbinden - F4, so dass es eine F2 usw. Feld für alle F2 Felder unter so viele als 5 Reihen, die alle verketteten, wie folgt:
select * from (
select F1,
TRIM("1_F2") || TRIM("2_F2") || TRIM("3_F2") || TRIM("4_F2") || TRIM("5_F2") as "F2",
TRIM("1_F3") || TRIM("2_F3") || TRIM("3_F3") || TRIM("4_F3") || TRIM("5_F3") as "F3",
TRIM("1_F4") || TRIM("2_F4") || TRIM("3_F4") || TRIM("4_F4") || TRIM("5_F4") as "F4"
from (
select ROWNUM as RN, T.* from (
select t1.F1, t2.F2, t2.F3, t2.F4
from schema.t1,
schema.t2
where
t1.F1 = t2.F1 (+)
) T
)
PIVOT (
MAX(F2) as "F2",
MAX(F3) as "F3",
MAX(F4) as "F4"
FOR RN in (1,2,3,4,5)
)
)
beispiels Dies kehrt Daten, so dass nicht alle Daten zwischen den Reihen F2, gefunden, in eine einzige Reihe F2 zurück für alle Datensätze verketteten geht. Für die Datensätze, wo es funktioniert, bekomme ich tatsächlich alle Daten wie im normalisierten Ergebnis gefunden. Wenn es jedoch nicht funktioniert, werden keine Daten wie im normalisierten Ergebnis zurückgegeben.
Irgendwelche Ideen? Was vermisse ich?
Vielen Dank im Voraus.
Dies gilt nicht beurteilen entweder - Ihre Klammern nicht übereinstimmen. – dipdapdop
@dipdapdop Ja, Sie hatten Recht. Und ich hatte die wichtigen Teile unnötigerweise in Sub-Selects eingebettet, also habe ich auch diese weggelassen. –
Es gibt immer noch einen Syntaxfehler in der äußeren SELECT-Klausel. Kann ich auch vorschlagen, dass Sie einige Testdaten in einem WITH-Block bereitstellen - es ist besser, ein voll funktionsfähiges Beispiel zu haben. – dipdapdop