Oracle-Rollup-Funktion mit mehreren Spalten

8

Ich habe eine einfache Abfrage:

%Vor%

Ich bekomme eine Ausgabe wie:

%Vor%

Aber ich brauche eine Ausgabe wie:

%Vor%

Vielen Dank im Voraus.

    
ajmalmhd04 19.11.2013, 09:42
quelle

2 Antworten

9

Ich finde es ziemlich einfach, die genauen Mengen anzugeben, die ich mit der GROUPING SET-Klausel brauche:

%Vor%

Ich vermute, dass es effizienter ist, da es die zu berechnenden Ebenen direkt spezifiziert.

Ссылка

CUBE und ROLLUP sind praktisch, um eine große Anzahl von Aggregationsebenen automatisch zu generieren (z. B. jede Ebene in einer dimensionalen Hierarchie), und es kann ein Fall für die Verwendung der GROUPING ID geben, wenn Sie eine kleine Teilmenge von Ebenen aus einer großen eliminieren möchten CUBE-generierter Satz, aber GROUPING SET ist genau zum Spezifizieren bestimmter Aggregationsebenen ausgelegt.

    
David Aldridge 19.11.2013, 13:41
quelle
8

GROUPING_ID Ausdruck

Sie können den Ausdruck GROUPING_ID verwenden, um zu filtern, welche Ebenen von Zwischensummen Sie benötigen:

%Vor%

Ausgabe:

%Vor%

GROUPING_ID gibt 0 für Zeilen ohne Zwischensummen zurück, 1 für die erste Ebene usw., wir können uns die von ihm zurückgegebenen Werte ansehen:

%Vor% %Vor%

Überprüfen Sie bei SQLFiddle

Mehr über Rollup und verwandte Themen: <<<< Tim Hall über Rollup und Cube

( Bearbeiten )

Die GROUPING-Funktion

Betreffend Kommentar. Sie können die Funktion GROUPING verwenden:

  

GROUPING - akzeptiert eine einzelne Spalte als Parameter und gibt "1" if zurück   Die Spalte enthält einen Nullwert, der als Teil einer Zwischensumme von a generiert wird    ROLLUP oder CUBE Operation oder "0" für jeden anderen Wert, einschließlich   gespeicherte Nullwerte.

Beispiel für zurückgegebene Werte:

%Vor%

Ausgabe:

%Vor%

Ihre Suchanfrage sollte also so aussehen:

%Vor%

Ausgabe:

%Vor%

Idee der Verwendung der Funktion GROUPING von AskTom, hier .

    
Przemyslaw Kruglej 19.11.2013 10:03
quelle

Tags und Links