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

lista de selección no es válida, porque no está contenida en una función de agregado

Estas en el tema de lista de selección no es válida, porque no está contenida en una función de agregado en el foro de SQL Server en Foros del Web. Tengo el siguiente cogido el cual me muestra id_interesa - id_propiedad - id_tipo = 401 hasta ahi todo bien pero resulta que quiero agruparlos por ...
  #1 (permalink)  
Antiguo 28/11/2015, 14:28
 
Fecha de Ingreso: noviembre-2015
Mensajes: 2
Antigüedad: 9 años
Puntos: 0
lista de selección no es válida, porque no está contenida en una función de agregado

Tengo el siguiente cogido el cual me muestra id_interesa - id_propiedad - id_tipo = 401
hasta ahi todo bien pero resulta que quiero agruparlos por el id_propiedad pero no me resulta y me tira el error que deje como titulo.

SELECT dbo.Interesa.Id_interesa, dbo.Interesa.Id_propiedad, dbo.Tipo.Id_tipo FROM dbo.Interesa INNER JOIN dbo.Propiedad ON dbo.Interesa.Id_propiedad = dbo.Propiedad.Id_propiedad INNER JOIN dbo.Tipo ON dbo.Propiedad.Id_tipo = dbo.Tipo.Id_tipo where tipo.Id_tipo = 401 -->GROUP BY Interesa.Id_propiedad<--- ORDER BY dbo.Interesa.Id_propiedad DESC

La columna 'dbo.Interesa.Id_interesa' 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.
  #2 (permalink)  
Antiguo 28/11/2015, 15:06
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: lista de selección no es válida, porque no está contenida en una función d

El único DBMS que admite que se agrupe sobre un solo campo del SELECT es MySQL. Todos los demás exigen que el GROUP BY contenga todos los campos que no estén con funciones de agregación.
__________________
¿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 28/11/2015, 17:12
 
Fecha de Ingreso: noviembre-2015
Mensajes: 2
Antigüedad: 9 años
Puntos: 0
Respuesta: lista de selección no es válida, porque no está contenida en una función d

Cita:
Iniciado por gnzsoloyo Ver Mensaje
El único DBMS que admite que se agrupe sobre un solo campo del SELECT es MySQL. Todos los demás exigen que el GROUP BY contenga todos los campos que no estén con funciones de agregación.
disculpa pero a que te refieres con que no esten con funciones de agregacion?
  #4 (permalink)  
Antiguo 28/11/2015, 17:25
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: lista de selección no es válida, porque no está contenida en una función d

Eso es una pregunta para buscar en un manual... ¿lo notaste?

Funciones de agregado (Transact-SQL)


Son las funciones que se aplican en un GROUP BY. Como SUM(), por ejemplo.
¿Que sentido tiene agrupar si no realizas cálculos en esa acción? ¿Para que agruparias si no?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 28/11/2015 a las 19:04
  #5 (permalink)  
Antiguo 30/11/2015, 09:20
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, 3 meses
Puntos: 774
Respuesta: lista de selección no es válida, porque no está contenida en una función d

A lo mejor quiere sacar nada mas los distintos :P, el error es porque cuando usas un group by en sql server las columnas que estan en tu select tienen que estar en tu group by, en este ejemplo deberias de poner todas las columnas de tu select en tu group by :) quedando algo como esto:

Código SQL:
Ver original
  1. SELECT dbo.Interesa.Id_interesa, dbo.Interesa.Id_propiedad, dbo.Tipo.Id_tipo FROM dbo.Interesa INNER JOIN dbo.Propiedad ON dbo.Interesa.Id_propiedad = dbo.Propiedad.Id_propiedad INNER JOIN dbo.Tipo ON dbo.Propiedad.Id_tipo = dbo.Tipo.Id_tipo WHERE tipo.Id_tipo = 401 GROUP BY Interesa.Id_propiedad,dbo.interesa.id_interesa
  2. ORDER BY dbo.Interesa.Id_propiedad DESC
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: group-by, innerjoin, query
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 08:48.