Ich habe eine einfache Abfrage:
%Vor%Ich bekomme eine Ausgabe wie:
%Vor%Aber ich brauche eine Ausgabe wie:
%Vor%Vielen Dank im Voraus.
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.
Sie können den Ausdruck GROUPING_ID
verwenden, um zu filtern, welche Ebenen von Zwischensummen Sie benötigen:
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:
Mehr über Rollup und verwandte Themen: <<<<
( Bearbeiten )
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
oderCUBE
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 .