sql >> Database >  >> RDS >> Sqlserver

SQL Server 2005-fout bij groeperen met behulp van subquery

Om te beginnen, als we de volledige fout geven, zou deze moeten lezen "Elke GROUP BY-expressie moet ten minste één kolom bevatten die geen buitenste verwijzing is. "

Om de fout te begrijpen, moeten we verduidelijken wat wordt bedoeld met een 'buitenste referentie'

(Opmerking:in dit geval heeft het niets te maken met binnenste of buitenste joins)

De innerlijke en buiten verwijzen naar de hoofdquery en de bijbehorende subquery's. In dit geval is de EXISTS is de subquery en het is een gecorreleerde subquery omdat het een buitenste referentie heeft van #header.header , die verwijst naar de buitenste tabel #header , terwijl elke verwijzing naar #detail zouden worden beschouwd als innerlijke referenties.

Dus in wezen, omdat de CASE gebruikt een gecorreleerde subquery die verwijst naar de buitenste query, dan activeert dit de foutstatus, omdat deze foutmelding verschijnt wanneer u probeert om alleen expressies in een GROUP BY-clausule te gebruiken die worden geïnterpreteerd als buitenste verwijzingen.

Subquery's kunnen worden gebruikt in GROUP BY, maar niet in gecorreleerde subquery's.

Verwarrend genoeg kan dezelfde fout worden gegenereerd door een niet-subqueried, eenvoudigere query zoals

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'

of zelfs de constante vervangen door een @variable

Helder als modder?

Kev



  1. Fatale fout:aanroep van een lidfunctie prepare() op boolean in

  2. Ik kan de fout niet vinden in mijn php-script

  3. Upload afbeeldingen als BLOB's in Oracle met behulp van PHP

  4. Converteer uitvoer van MySQL-query naar utf8