sql >> Database teknologi >  >> RDS >> Sqlserver

Kolonne ugyldig i valglisten, fordi den ikke er indeholdt i hverken en aggregeret funktion eller GROUP BY-sætningen

Sagt med andre ord, denne fejl fortæller dig, at SQL Server ikke ved hvilken B for at vælge fra gruppen.

Enten vil du vælge en bestemt værdi (f.eks. MIN). , SUM eller AVG ) i hvilket tilfælde du vil bruge den passende aggregerede funktion, eller du vil vælge hver værdi som en ny række (dvs. inklusive B i GROUP BY feltliste).

Overvej følgende data:

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

Forespørgslen

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

ville returnere:

A  T1
1  2
2  3

hvilket er godt og vel.

Overvej dog følgende (ulovlige) forespørgsel, som ville frembringe denne fejl:

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

Og dets returnerede datasæt, der illustrerer problemet:

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

De følgende to forespørgsler gør dette dog klart og vil ikke forårsage fejlen:

  1. Brug af et aggregat

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

    ville returnere:

    A  T1  B
    1  2   92
    2  3   68
    
  2. Tilføjelse af kolonnen til GROUP BY liste

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

    ville returnere:

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


  1. Introduktion til Multi-Statement Table-Valued Functions (MSTVF) i SQL Server

  2. SQL Server VÆLG SIDSTE N rækker

  3. Sådan aktiveres den langsomme forespørgselslog i MySQL

  4. Left Outer Join returnerer ikke alle rækker fra mit venstre bord?