Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Spalte in der Auswahlliste ungültig, da sie weder in einer Aggregatfunktion noch in der GROUP BY-Klausel enthalten ist

Mit anderen Worten, dieser Fehler sagt Ihnen, dass SQL Server nicht weiß, welcher B aus der Gruppe auszuwählen.

Entweder möchten Sie einen bestimmten Wert auswählen (z. B. den MIN , SUM , oder AVG ), in diesem Fall würden Sie die entsprechende Aggregatfunktion verwenden oder jeden Wert als neue Zeile auswählen (d. h. einschließlich B). im Feld GROUP BY Feldliste).

Betrachten Sie die folgenden Daten:

ID  A   B
1   1  13
1   1  79
1   2  13
1   2  13
1   2  42

Die Abfrage

SELECT A, COUNT(B) AS T1 
FROM T2 
GROUP BY A

würde zurückgeben:

A  T1
1  2
2  3

das ist alles schön und gut.

Betrachten Sie jedoch die folgende (illegale) Abfrage, die diesen Fehler erzeugen würde:

SELECT A, COUNT(B) AS T1, B 
FROM T2 
GROUP BY A

Und der zurückgegebene Datensatz, der das Problem veranschaulicht:

A  T1  B
1  2   13? 79? Both 13 and 79 as separate rows? (13+79=92)? ...?
2  3   13? 42? ...?

Die folgenden zwei Abfragen verdeutlichen dies jedoch und verursachen den Fehler nicht:

  1. Verwendung eines Aggregats

    SELECT A, COUNT(B) AS T1, SUM(B) AS B
    FROM T2
    GROUP BY A
    

    würde zurückgeben:

    A  T1  B
    1  2   92
    2  3   68
    
  2. Hinzufügen der Spalte zu GROUP BY Liste

    SELECT A, COUNT(B) AS T1, B
    FROM T2
    GROUP BY A, B
    

    würde zurückgeben:

    A  T1  B
    1  1   13
    1  1   79
    2  2   13
    2  1   42