Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

[SOLUCIONADO] ERROR: porque no está contenida en una función de agregado ni en la cláusula GROUP BY

Estas en el tema de ERROR: porque no está contenida en una función de agregado ni en la cláusula GROUP BY en el foro de SQL Server en Foros del Web. Hola, Tengo la siguiente consulta: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código SQL: Ver original SELECT PkFlujoAutorizacionXrequisicion ,       MAX ( PkFlujoAutorizacion ) AS FLU ,   ...
  #1 (permalink)  
Antiguo 08/01/2014, 17:48
 
Fecha de Ingreso: noviembre-2007
Mensajes: 504
Antigüedad: 17 años, 1 mes
Puntos: 2
ERROR: porque no está contenida en una función de agregado ni en la cláusula GROUP BY

Hola,
Tengo la siguiente consulta:
Código SQL:
Ver original
  1. SELECT PkFlujoAutorizacionXrequisicion,
  2.       MAX( PkFlujoAutorizacion)AS FLU,
  3.        PkRequisicion,
  4.        UsuarioAutorizo
  5.         FROM dbo.FlujoAutorizacionXrequisicion
  6. WHERE PKrequisicion =1
La cual me da el siguiente error:
Msg 8120, Level 16, State 1, Line 1
La columna 'dbo.FlujoAutorizacionXrequisicion.PkFlujoAutoriza cionXrequisicion' de la lista de selección no es válida, porque no está contenida en una función de agregado ni en la cláusula GROUP BY.


Funcionaba muy bien antes de agregarle la columna donde mando a llamar a la funcion MAX
Alguien sabe como solucionarlo?
  #2 (permalink)  
Antiguo 08/01/2014, 17:51
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: ERROR: porque no está contenida en una función de agregado ni en la cláusu

Regla básica: Toda columna no afectada por una función agregada (tales como COUNT(), SUM(), AVG(), MAX(), MIN(), etc), obligatoriamente debe estar listada en un GROUP BY.

Tu consulta debería ser:
Código SQL:
Ver original
  1. SELECT PkFlujoAutorizacionXrequisicion, MAX( PkFlujoAutorizacion) FLU, PkRequisicion, UsuarioAutorizo
  2. FROM dbo.FlujoAutorizacionXrequisicion
  3. WHERE PKrequisicion =1
  4. GROUP BY PkFlujoAutorizacionXrequisicion, PkRequisicion, UsuarioAutorizo

Que la query devuelva un único registro es irrelevante para SQL Server. La regla persiste.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 08/01/2014, 17:59
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 4 meses
Puntos: 774
Respuesta: ERROR: porque no está contenida en una función de agregado ni en la cláusu

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Regla básica: Toda columna no afectada por una función agregada (tales como COUNT(), SUM(), AVG(), MAX(), MIN(), etc), obligatoriamente debe estar listada en un GROUP BY.

Tu consulta debería ser:
Código SQL:
Ver original
  1. SELECT PkFlujoAutorizacionXrequisicion, MAX( PkFlujoAutorizacion) FLU, PkRequisicion, UsuarioAutorizo
  2. FROM dbo.FlujoAutorizacionXrequisicion
  3. WHERE PKrequisicion =1
  4. GROUP BY PkFlujoAutorizacionXrequisicion, PkRequisicion, UsuarioAutorizo

Que la query devuelva un único registro es irrelevante para SQL Server. La regla persiste.
Excelente respuesta
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #4 (permalink)  
Antiguo 08/01/2014, 18:01
 
Fecha de Ingreso: noviembre-2007
Mensajes: 504
Antigüedad: 17 años, 1 mes
Puntos: 2
Respuesta: ERROR: porque no está contenida en una función de agregado ni en la cláusu

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Regla básica: Toda columna no afectada por una función agregada (tales como COUNT(), SUM(), AVG(), MAX(), MIN(), etc), obligatoriamente debe estar listada en un GROUP BY.

Tu consulta debería ser:
Código SQL:
Ver original
  1. SELECT PkFlujoAutorizacionXrequisicion, MAX( PkFlujoAutorizacion) FLU, PkRequisicion, UsuarioAutorizo
  2. FROM dbo.FlujoAutorizacionXrequisicion
  3. WHERE PKrequisicion =1
  4. GROUP BY PkFlujoAutorizacionXrequisicion, PkRequisicion, UsuarioAutorizo

Que la query devuelva un único registro es irrelevante para SQL Server. La regla persiste.
No mames Te amo!!!
Gracias!

Etiquetas: agregado, columna, group, select
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:09.