Bei meiner Aufgabe wurde ich gebeten herauszufinden, wie viele Rechnungen für jedes Datum geschrieben wurden.
Ich steckte ein wenig fest und bat meinen Professor um Hilfe. Sie schickte mir eine E-Mail mit der Frage: "Wie viele Öfen jedes Typs und jeder Version wurden gebaut? Geben Sie für eine Herausforderung, aber ohne zusätzliche Punkte, die Gesamtzahl der Öfen an."
Dies war die Frage, die sie mir schickte:
SELECT STOVE.Type + STOVE.Version AS 'Type+Version'
, COUNT(*) AS 'The Count'
FROM STOVE
GROUP BY STOVE.Type + STOVE.Version WITH ROLLUP;
Also habe ich diese Abfrage optimiert, bis sie meinen Anforderungen entsprach. Folgendes habe ich mir ausgedacht:
SELECT InvoiceDt
, COUNT(InvoiceNbr) AS 'Number of Invoices'
FROM INVOICE
GROUP BY InvoiceDt WITH ROLLUP
ORDER BY InvoiceDt ASC;
Und es gab die folgenden Ergebnisse zurück, die ich wollte.
Wie auch immer, ich entschied mich, die ROLLUP-Klausel zu lesen und begann mit einem Artikel von Microsoft . Die ROLLUP-Klausel ähnelte der CUBE-Klausel, unterschied sich jedoch folgendermaßen von der CUBE-Klausel:
- CUBE generiert eine Ergebnismenge, die Aggregate für alle Wertekombinationen in den ausgewählten Spalten anzeigt.
- ROLLUP generiert eine Ergebnismenge, die Aggregate für eine Wertehierarchie in den ausgewählten Spalten anzeigt.
Also habe ich beschlossen, das ROLLUP in meiner Abfrage durch CUBE zu ersetzen, um zu sehen, was passieren würde. Sie haben die gleichen Ergebnisse erzielt. Ich denke, dort werde ich verwirrt.
Wenn Sie die Art der Abfrage verwenden, die ich hier verwende, gibt es anscheinend keinen praktischen Unterschied zwischen den beiden Klauseln. Ist das richtig? Oder verstehe ich etwas nicht? Als ich mit dem Lesen des Microsoft-Artikels fertig war, hatte ich gedacht, dass meine Ergebnisse mit der CUBE-Klausel anders hätten sein sollen.