SQL-Abfrage: Pivot, jedoch mit unterschiedlicher Anzahl oder Zeilen

Schlange

Was ist die beste Variante, um eine Abfrage zu erstellen, um Zeilen in Spalten wie Pivot zu sammeln, jedoch ohne Aggregation, und möglicherweise befinden sich mehrere Zeilen in jeder Spalte?

Beispieldaten:

id, parent_fk, month, quantity
10, 1111, 'jan', 21
11, 1111, 'jan', 24
12, 1111, 'feb', 12

13, 2222, 'jan', 3 
14, 2222, 'feb', 4
15, 2222, 'mar', 5

16, 3333, 'feb', 77
17, 3333, 'feb', 88
16, 3333, 'mar', 99

Jeder Monat kann eine andere Anzahl von Zeilen enthalten. Ich muss sie daneben stellen und durch Höhen rechtfertigen. Ich möchte diese Daten wie folgt anzeigen:

parent_fk, jan, feb, mar
1111,    21, 12, __
1111,    24, __, __
2222,     3,  4,  5
3333,    __, 77, 99
3333,    __, 88, __

Derzeit habe ich eine solche nicht elegante Abfrage (Bestellung in jedem Monat mit row_number über Partition erstellen und alle Monate durch diese Reihenfolge verbinden):

select
    nvl(JAN.parent_fk, nvl(FEB.parent_fk, nvl(MAR.parent_fk, -1))) calc_parent_fk,
    JAN.quantity jan, 
    FEB.quantity feb, 
    MAR.quantity mar
 from
    (select id, parent_fk, quantity, 
    row_number() OVER (PARTITION BY parent_fk, mnth order by id) "RN" 
    from T_MONTH_DATA 
    where mnth = 'jan') JAN 
full join
    (select id, parent_fk, quantity, 
    row_number() OVER (PARTITION BY parent_fk, mnth order by id) "RN" 
    from T_MONTH_DATA 
    where mnth = 'feb') FEB
    on JAN.parent_fk = FEB.parent_fk and JAN.RN = FEB.RN
full join
    (select id, parent_fk, quantity, 
    row_number() OVER (PARTITION BY parent_fk, mnth order by id) "RN" 
    from T_MONTH_DATA 
    where mnth = 'mar') MAR
    on FEB.parent_fk = MAR.parent_fk and FEB.RN = MAR.RN
order by 1

Gibt es eine einfachere Möglichkeit, solche Daten darzustellen? Wie erhalte ich das resultierende parent_fk? (Ich verwende verschachtelte NVL, da ich nicht weiß, welcher der Monate maximal Zeilen enthält und alle anderen Monate dort null haben.)

Überlegen Sie sich Bänder

Verwenden Sie in Oracle 11g die folgende pivotKlausel und Funktion row_number():

select parent_fk, jan, feb, mar 
  from ( 
    select row_number() over (partition by mnth, parent_fk order by id) rn, 
           parent_fk, mnth, quantity 
      from t_month_data )
  pivot (sum(quantity) for mnth in ('jan' jan, 'feb' feb, 'mar' mar))
  order by parent_fk

Testdaten und Ausgabe:

create table t_month_data (id number(4), parent_fk number(4), 
                           mnth varchar2(3), quantity number(6));

insert into t_month_data values (10, 1111, 'jan', 21);
insert into t_month_data values (11, 1111, 'jan', 24);
insert into t_month_data values (12, 1111, 'feb', 12);
insert into t_month_data values (13, 2222, 'jan',  3);
insert into t_month_data values (14, 2222, 'feb',  4);
insert into t_month_data values (15, 2222, 'mar',  5);
insert into t_month_data values (16, 3333, 'feb', 77);
insert into t_month_data values (17, 3333, 'feb', 88);
insert into t_month_data values (16, 3333, 'mar', 99);

PARENT_FK        JAN        FEB        MAR
--------- ---------- ---------- ----------
     1111         21         12 
     1111         24            
     2222          3          4          5
     3333                    77         99
     3333                    88 

Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.

Bei Verstößen wenden Sie sich bitte [email protected] Löschen.

bearbeiten am
0

Lass mich ein paar Worte sagen

0Kommentare
LoginNach der Teilnahme an der Überprüfung

Verwandte Artikel

Mongo-Abfrage zum Sortieren von Ergebnissen mit maximaler Anzahl unterschiedlicher Attribute oder Schlüssel?

SQL - Kopieren von Zeilen derselben Tabelle, jedoch mit unterschiedlicher Fremdschlüssel-ID

SQL-Abfrage zum Verbinden von zwei verschiedenen Abfragen mit unterschiedlicher Anzahl von Spalten

Kombinieren Sie zwei Tabellen mit unterschiedlicher Anzahl von Zeilen in SQL Server

Raster mit Zeilen mit unterschiedlicher Anzahl von Spalten

Generieren einer SQL-Abfrage mit einer bestimmten Anzahl von Zeilen in einer Abfrage

SQL-Abfrage zum Anzeigen der Datensätze mit 3 oder mehr aufeinanderfolgenden Zeilen und der Anzahl der Personen über 100

MYSQL - Unterschiedliche Anzahl mit unterschiedlicher where-Klausel in einer Abfrage

Zusammenführen von Datenrahmen mit unterschiedlicher Anzahl von Zeilen

Verbinden Sie 2 Spalten mit unterschiedlicher Anzahl von Zeilen in R

Binden Sie Spalten mit unterschiedlicher Anzahl von Zeilen

cbinden Sie 2 Datenrahmen mit unterschiedlicher Anzahl von Zeilen

Write.table als Textdatei mit unterschiedlicher Anzahl von Zeilen

Bindung von 2 Datensätzen mit unterschiedlicher Anzahl von Zeilen

Mehrere Zeilen in Google Charts mit unterschiedlicher Anzahl von Datensätzen

Kombinieren von Datenrahmen mit unterschiedlicher Anzahl von Spalten und Zeilen

Kombinieren von Datensätzen mit unterschiedlicher Anzahl von Zeilen

Rvest verschrottet Google News mit unterschiedlicher Anzahl von Zeilen

SQL-Abfrage zum Zählen der Anzahl der Zeilen mit demselben Wert

Zählen der Anzahl der Zeilen mit eindeutigen Werten in jeder Spalte nach der Abfrage in SQL

Mehrere Zeilen mit Pivot in sql

Subtrahieren Sie zwei Spalten unterschiedlicher Tabellen mit unterschiedlicher Anzahl von Zeilen

Kombinieren Sie mehrere Blätter mit der gleichen Anzahl von Spalten, aber unterschiedlicher Anzahl von Zeilen

SQL-Abfrage - So erhalten Sie zwei oder mehr Zeilen mit Gruppierung nach

So transformieren Sie Zeilen in Spalten mit Cube, Pivot oder Rollup SQL

SQL Server-Pivot-Spalten in Zeilen füllen NULL mit Null oder einem vorhandenen Wert

Oracle SQL Header und Detail mit unterschiedlicher Anzahl von Ausgabespalten

Zählen der Anzahl der Zeilen in der Abfrage mit PHP

Unterauswahl mit Anzahl, SQL-Abfrage

TOP Liste

  1. 1

    So legen Sie mit dem Interface Builder unterschiedliche führende Speicherplätze für unterschiedliche Geräte fest

  2. 2

    Fügen Sie eine weitere Schaltfläche zu gwt Suggest Box hinzu

  3. 3

    Wie konvertiere ich einen Vektor von Bytes (u8) in eine Zeichenfolge?

  4. 4

    Wie kann ich in SCSS mehrere Klassen zu einer einzigen kombinieren?

  5. 5

    Wie konvertiert man einen Datenrahmen im langen Format in eine Liste mit einem geeigneten Format?

  6. 6

    Speichern Sie ein MPAndroidChart-Diagramm in einem Bild, ohne es in einer Aktivität anzuzeigen

  7. 7

    Gruppieren Sie Datenrahmenspalten nach ihrem Datum (die Spaltentitel enthalten) und fassen Sie die Instanzen von Einsen und Nullen in R . zusammen

  8. 8

    Tomcat - Leiten Sie den alten Kontextstamm zum neuen Kontextstamm um

  9. 9

    Eclipse Oxygen - Projekte verschwinden

  10. 10

    Wie wählt man Unterschiede mit drei Tabellen aus?

  11. 11

    Tic Tac Toe-Spiel im React-Reset-Button funktioniert nicht

  12. 12

    So berechnen Sie die Verfügbarkeit von Anwendungen (SLA)

  13. 13

    ElasticSearch BulkShardRequest ist aufgrund von org.elasticsearch.common.util.concurrent.EsThreadPoolExecutor fehlgeschlagen

  14. 14

    Wie kann ich den Kaskadenmodus global einstellen?

  15. 15

    Python: Spalten mit demselben Namen zusammenführen, wobei der Mindestwert beibehalten wird

  16. 16

    So erhalten Sie eine gleichmäßige Höhe für alle Eingabefelder

  17. 17

    Wie erstelle ich einen neuen übergeordneten Knoten außerhalb der .ref (/ path) in der Firebase-Echtzeitdatenbank mithilfe von Cloud-Funktionen (Typescript)?

  18. 18

    Was ist schneller: SUM über NULL oder über 0?

  19. 19

    Wie kann ich eine verschachtelte Schleife mit lapply in R ersetzen?

  20. 20

    Kann ich ein Tkinter-Canvas erstellen, das mehrere Zeilen in einem Text-Widget umfasst?

  21. 21

    Ärgerliches Problem mit yaml, das ich nicht lösen kann

heißlabel

Archiv