Dynamische pivot in oracle sql
... pivot (sum(A) für B (X))
Nun B ist vom Datentyp varchar2, und X ist ein string varchar2-Werte durch Kommas getrennt sind.
Werte für X sind select distinct Werte aus einer Spalte(sagen wir CL) von der gleichen Tabelle. Auf diese Weise pivot-Abfrage zu arbeiten.
Aber das problem ist, dass Wann immer ein neuer Wert in der Spalte CL habe ich manuell hinzufügen, um die Zeichenkette X.
Ich habe versucht, ersetzen Sie X mit select distinct Werte von CL. Aber die Abfrage wird nicht ausgeführt.
Der Grund, warum ich fühlte, war aufgrund der Tatsache, dass für den Austausch X wir müssen die Werte durch Kommata getrennt sind.
Dann erstellte ich eine Funktion, um zurückzukehren, genaue Leistung auf übereinstimmung mit der Zeichenkette X. Aber die Abfrage noch nicht ausgeführt.
Die Fehlermeldungen angezeigt werden wie "missing righr Klammern", "end of file communication channel" etc etc.
Ich habe versucht, pivot-xml statt nur pivot, das query wird ausgeführt, aber gibt vlaues wie oraxxx etc was sind überhaupt keine Werte.
Vielleicht bin ich nicht mit es richtig.
Können Sie mir sagen, einige Methode zum erstellen einer PivotTabelle mit dynamischer Werte?
InformationsquelleAutor prabhakar | 2013-03-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie nicht einen nicht Konstanten string in der
IN
- Klausel der pivot-Klausel.Sie können Pivot-XML.
Vom Dokumentation:
Sollte es so Aussehen:
Können Sie auch eine Unterabfrage anstelle der
ANY
Stichwort:Hier ist ein sqlfiddle demo
AFAIK, nicht dynamisch... Aber wie wollen Sie verwenden ein Ergebnis, das Sie nicht wissen, die Struktur ?
InformationsquelleAutor A.B.Cade
Können Sie nicht setzen eine dynamische Anweisung in der PIVOT-IN-Anweisung ohne PIVOT XML, die Ausgänge einer weniger als wünschenswert Ausgang. Sie können jedoch erstellen eine Zeichenfolge, und geben Sie ihn in Ihrer Aussage.
Erste, hier ist mein Beispiel-Tabelle;
Ersten setup die Zeichenfolge verwenden, die in Ihrem statement. Hier sind Sie setzen die Zeichenfolge in "str_in_statement". Wir sind mit SPALTE NEUER_WERT und LISTAGG, um den setup-string.
Dein string Aussehen wird:
Nun mit der String-Anweisung in der PIVOT-Abfrage.
Hier ist die Ausgabe:
Es gibt Grenzen, aber. Sie können nur verketten einer Zeichenfolge von bis zu 4000 bytes.
Wie implementieren diese in Oracle-Prozedur? pls ein Beispiel geben
Was ist die
clear columns
Befehl für?InformationsquelleAutor user2179919
Für spätere Leser, hier ist eine andere Lösung
https://technology.amis.nl/2006/05/24/dynamic-sql-pivoting-stealing-antons-thunder/
ermöglicht eine Abfrage, wie
Angesichts der Termine beteiligt sind, dann ja, sollte es. 12c war nicht damals. Überprüfen Privilegien.
InformationsquelleAutor Scott
VERWENDEN SIE DYNAMISCHE ABFRAGE
Test-code ist unten
InformationsquelleAutor Rana Suhaib
Ich habe die oben genannten Methode (Anton-PL/SQL, benutzerdefinierte Funktion, pivot()) und es erledigt den job! Wie ich bin nicht eine professionelle Oracle Entwickler, dies sind die einfachen Schritte, die ich gemacht habe:
1) Laden Sie die zip-Paket zu finden pivotFun.sql drin.
2) Führen Sie, sobald die pivotFun.sql zum erstellen einer neuen Funktion
3) Verwenden Sie die Funktion im normalen SQL.
Nur vorsichtig sein, mit dynamischen Spalten-Namen. In meiner Umgebung fand ich, dass die Spalte name ist begrenzt mit 30 Zeichen lang sein und darf aus einem einzigen Zitat. Also, meine Abfrage ist jetzt so etwas wie dieses:
Gut funktioniert mit bis zu 1m records.
InformationsquelleAutor user7144213
Ich bin nicht genau gehen, geben Antwort auf die Frage der OP hat gefragt, stattdessen werde ich nur beschreiben, wie die dynamische pivot getan werden kann.
Hier müssen wir dynamisches sql verwenden, indem man zunächst das abrufen der Spalte Werte in eine variable und übergibt die variable in dynamic sql.
BEISPIEL
Betrachten wir eine Tabelle, wie unten.
Wenn wir brauchen, um die Werte in der Spalte
YR
als Spaltennamen und die Werte in diesen Spalten vonQTY
, dann können wir den folgenden code.ERGEBNIS
Falls erforderlich, können Sie auch eine temp-Tabelle und führen Sie eine select-Abfrage in das temp-Tabelle, um die Ergebnisse zu sehen. Es ist einfach, fügen Sie einfach die
CREATE TABLE TABLENAME AS
im obigen code.InformationsquelleAutor Sarath Avanavu