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

SQL Server 2005-fejl ved gruppering ved hjælp af underforespørgsel

Til at starte med, hvis vi giver den fulde fejl, bør den læse "Hvert GROUP BY-udtryk skal indeholde mindst én kolonne, der ikke er en ydre reference. "

For at forstå fejlen skal vi præcisere, hvad der menes med en 'ydre reference'

(Bemærk:i dette tilfælde har det intet at gøre med indre eller ydre sammenføjninger)

Det indre og ydre refererer til hovedforespørgslen og dens underforespørgsler. I dette tilfælde EXISTS er underforespørgslen, og den er en korreleret underforespørgsel, da den har en ydre reference på #header.header , som refererer til den ydre tabel #header , hvorimod enhver henvisning til #detail ville blive betragtet som indre referencer.

Så i det væsentlige fordi CASE bruger en korreleret underforespørgsel, der refererer til den ydre forespørgsel, så udløser dette fejltilstanden, fordi denne fejlmeddelelse vises, når du prøver kun at bruge udtryk i en GROUP BY-sætning, der fortolkes som ydre referencer.

Underforespørgsler kan bruges i GROUP BY, men ikke korrelerede underforespørgsler.

Forvirrende nok kan den samme fejl genereres af en ikke-underforespurgt, enklere forespørgsel som f.eks.

select 
 case when header=1 then 1 
      else 0 
 end headeris1, 
 'constant' 
from #header 
group by case when header=1 then 1 else 0 end , 'constant'

eller endda erstatte konstanten med en @variable

Klart som mudder?

Kev



  1. SQL SELECT LIKE (ufølsomt bogstav)

  2. Python Postgres Bedste måde at indsætte data fra tabel på en DB til en anden tabel på en anden DB

  3. LOAD DATA LOCAL INFILE stopper import ved 69.000 rækker

  4. Bedste måde at gemme tags for hastighed i en enorm tabel