Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Błąd SQL Server 2005 podczas grupowania przy użyciu podzapytania

Na początek, jeśli podamy pełny błąd, powinien brzmieć „Każde wyrażenie GROUP BY musi zawierać co najmniej jedną kolumnę, która nie jest zewnętrznym odwołaniem. "

Aby zrozumieć błąd, musimy wyjaśnić, co oznacza „odniesienie zewnętrzne”

(Uwaga:w tym przypadku nie ma to nic wspólnego z połączeniami wewnętrznymi lub zewnętrznymi)

wewnętrzny i zewnętrzne odnoszą się do głównego zapytania i jego podzapytań. W tym przypadku EXISTS to podzapytanie i jest skorelowane podzapytanie, ponieważ ma zewnętrzne odwołanie do #header.header , który odwołuje się do zewnętrznej tabeli #header , natomiast wszelkie odniesienia do #detail będą traktowane jako wewnętrzne odniesienia.

Tak więc w istocie, ponieważ CASE wykorzystuje skorelowane podzapytanie, które odwołuje się do zapytania zewnętrznego, a następnie uruchamia stan błędu, ponieważ ten komunikat o błędzie pojawia się, gdy próbujesz użyć tylko wyrażeń w klauzuli GROUP BY, które są interpretowane jako odniesienia zewnętrzne.

Podzapytania mogą być używane w GROUP BY, ale nie w skorelowanych podzapytaniach.

Myląco, ten sam błąd może zostać wygenerowany przez prostsze zapytanie, które nie jest podrzędne, takie jak

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'

a nawet zastąpienie stałej @variable

Czysta jak błoto?

Kev



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wywołać procedurę składowaną z argumentami przy użyciu programu sqlcmd.exe?

  2. Czy są jakieś darmowe narzędzia do generowania skryptów 'INSERT INTO' w MS SQL Server?

  3. Zaktualizuj wiele kolumn w SQL

  4. Ile indeksów klastrowych może znajdować się w jednej tabeli?

  5. Jak używać aliasu w klauzuli where?