sql >> Base de Datos >  >> RDS >> Sqlserver

Error de SQL Server 2005 al agrupar mediante subconsulta

Para empezar, si damos el error completo, debería decir "Cada expresión GROUP BY debe contener al menos una columna que no sea una referencia externa. "

Para comprender el error, debemos aclarar qué significa una 'referencia externa'

(Nota:en este caso no tiene nada que ver con las uniones internas o externas)

El interior y exterior se refieren a la consulta principal y sus subconsultas. En este caso, EXISTS es la subconsulta y es una correlacionada subconsulta ya que tiene una referencia externa de #header.header , que hace referencia a la tabla exterior #header , mientras que cualquier referencia a #detail serían considerados como referencias internas.

Entonces, en esencia, porque el CASE utiliza una subconsulta correlacionada que hace referencia a la consulta externa, entonces esto activa el estado de error, porque este mensaje de error aparece cuando intenta usar solo expresiones en una cláusula GROUP BY que se interpretan como referencias externas.

Las subconsultas pueden usarse en GROUP BY, pero no en subconsultas correlacionadas.

De manera confusa, el mismo error puede ser generado por una consulta más simple no subconsultada como

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'

o incluso reemplazando la constante con un @variable

¿Claro como el barro?

Kev