Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Грешка в SQL Server 2005 при групиране с помощта на подзаявка

Като начало, ако дадем пълната грешка, тя трябва да гласи „Всеки израз GROUP BY трябва да съдържа поне една колона, която не е външна препратка. "

За да разберем грешката, трябва да изясним какво се има предвид под „външна препратка“

(Забележка:в този случай това няма нищо общо с вътрешни или външни съединения)

Вътрешният и външен са във връзка с основната заявка и нейните подзаявки. В този случай EXISTS е подзаявката и е свързана подзаявка, тъй като има външна препратка към #header.header , който препраща към външната таблица #header , докато всяка препратка към #detail ще се считат за вътрешни препратки.

Така че по същество, защото CASE използва корелирана подзаявка, която препраща към външната заявка, след което това задейства състоянието на грешка, тъй като това съобщение за грешка се появява, когато се опитате да използвате само изрази в клауза GROUP BY, които се интерпретират като външни препратки.

Подзаявкиможе да се използва в GROUP BY, но не и в корелирани подзаявки.

Объркващо е, че същата грешка може да бъде генерирана от по-проста заявка без подзапитване, като например

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'

или дори замяна на константата с @variable

Чисто като кал?

Кев



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 5 предимства за сигурността на решенията за наблюдение на базирани в облак бази данни

  2. Как да се свържете с база данни на SQL сървър от приложение за Windows 10 UWP

  3. Какво прави 'COLLATE SQL_Latin1_General_CP1_CI_AS'?

  4. Инсталиране на клъстер за отказване на SQL сървър -1

  5. Съхраняване на формула (уравнения) в база данни за оценка по-късно (SQL Server 2005)