Freigeben über


Arbeiten mit Spalten in aggregierten Abfragen (Visual Database Tools)

Gilt für:SQL Server-

Wenn Sie aggregierte Abfragen erstellen, werden von den Abfrage- und Ansichts-Designertools (Visual Database Tools) bestimmte Annahmen getroffen, damit sie eine gültige Abfrage erstellen können. Wenn Sie beispielsweise eine Aggregatabfrage erstellen und eine Datenspalte für die Ausgabe markieren, erstellt der Abfrage- und Ansichts-Designer automatisch den Spaltenteil der GROUP BY Klausel, sodass Sie nicht versehentlich versuchen, den Inhalt einer einzelnen Zeile in einer Zusammenfassung anzuzeigen.

Verwenden von "Gruppieren nach"

Der Abfrage- und Ansichts-Designer verwendet die folgenden Richtlinien für das Arbeiten mit Spalten:

  • Wenn Sie die Option "Gruppieren nach" auswählen oder einer Abfrage eine Aggregatfunktion hinzufügen, werden alle spalten, die für die GROUP BY Ausgabe markiert oder zum Sortieren verwendet werden, der Klausel automatisch hinzugefügt. Spalten werden der Klausel nicht automatisch hinzugefügt GROUP BY , wenn sie bereits Teil einer Aggregatfunktion sind.

    Wenn eine bestimmte Spalte nicht Teil der GROUP BY Klausel sein soll, müssen Sie sie manuell ändern, indem Sie eine andere Option in der Spalte "Gruppieren nach" im Bereich "Kriterien" auswählen. Der Abfrage- und Ansichts-Designer verhindert jedoch nicht, dass Sie eine Option auswählen, die zu einer Abfrage führen kann, die nicht ausgeführt wird.

  • Wenn Sie eine Abfrageausgabespalte manuell zu einer Aggregatfunktion im Kriterien- oder SQL-Bereich hinzufügen, entfernt der Abfrage- und Ansichts-Designer nicht automatisch andere Ausgabespalten aus der Abfrage. Daher müssen Sie die verbleibenden Spalten aus der Abfrageausgabe entfernen oder sie zu einem Teil der GROUP BY Klausel oder einer Aggregatfunktion machen.

Wenn Sie eine Suchbedingung in die Spalte "Filter" des Bereichs "Kriterien" eingeben, folgt der Abfrage- und Ansichts-Designer den folgenden Regeln:

  • Wenn die Spalte " Gruppieren nach " des Rasters nicht angezeigt wird (da Sie noch keine Aggregatabfrage angegeben haben), wird die Suchbedingung in die WHERE Klausel eingefügt.

  • Wenn Sie sich bereits in einer Aggregatabfrage befinden und die Option "Wo in der Spalte " Gruppieren nach " ausgewählt haben, wird die Suchbedingung in die WHERE Klausel eingefügt.

  • Wenn die Spalte "Gruppieren nach " einen anderen Wert als "Where" enthält, wird die Suchbedingung in der HAVING Klausel platziert.

Verwenden der HAVING- und WHERE-Klauseln

Die folgenden Prinzipien beschreiben, wie Sie in suchbedingungen auf Spalten in einer Aggregatabfrage verweisen können. Im Allgemeinen können Sie eine Spalte in einer Suchbedingung verwenden, um die Zeilen zu filtern, die zusammengefasst werden sollen (eine WHERE Klausel) oder um zu bestimmen, welche gruppierten Ergebnisse in der endgültigen Ausgabe (a HAVING Klausel) angezeigt werden sollen.

  • Einzelne Datenspalten können abhängig davon, wie sie an anderer Stelle in der Abfrage verwendet werden, entweder in der WHERE Klausel oder HAVING in der Klausel angezeigt werden.

  • WHERE Klauseln werden verwendet, um eine Teilmenge von Zeilen zum Zusammenfassen und Gruppieren auszuwählen und werden daher angewendet, bevor eine Gruppierung abgeschlossen ist. Daher können Sie eine Datenspalte in einer WHERE Klausel verwenden, auch wenn sie nicht Teil der GROUP BY Klausel ist oder in einer Aggregatfunktion enthalten ist. ** Zum Beispiel wählt die folgende Anweisung alle Titel aus, die mehr als 10,00 $ kosten und berechnet den Durchschnittspreis.

    SELECT AVG(price)
    FROM titles
    WHERE price > 10;
    
  • Wenn Sie eine Suchbedingung erstellen, die eine Spalte umfasst, die auch in einer GROUP BY Klausel oder Aggregatfunktion verwendet wird, kann die Suchbedingung entweder WHERE als Klausel oder als HAVING Klausel angezeigt werden . Sie können entscheiden, welche Bedingung Sie beim Erstellen der Bedingung erstellen. Die folgende Anweisung erstellt beispielsweise einen Durchschnittspreis für die Titel für jeden Herausgeber und zeigt dann den Mittelwert für die Herausgeber an, in denen der Durchschnittspreis größer als 10,00 $ ist:

    SELECT pub_id,
           AVG(price)
    FROM titles
    GROUP BY pub_id
    HAVING (AVG(price) > 10);
    
  • Wenn Sie eine Aggregatfunktion in einer Suchbedingung verwenden, umfasst die Bedingung eine Zusammenfassung und muss daher Teil der HAVING Klausel sein.