Consulta Sql

13/11/2007 - 15:05 por Jectán Acosta | Informe spam
Hola amigos, tengo un problemilla al hacer un select sobre un par de tablas.
Una de ella contiene un campo image y al hacer la consulta me lanza un error.



SELECT dbo.CUOTAS.ID_CLIENTE AS ID_CLIENTE, dbo.CLIENTES.NOMBRE AS
NOMBRE, dbo.CLIENTES.apellidos AS APELLIDOS,
MAX(dbo.CUOTAS.FECHA_FINA) AS ULTIMA,
dbo.CLIENTES.imagen
FROM dbo.CUOTAS INNER JOIN
dbo.CLIENTES ON dbo.CUOTAS.ID_CLIENTE = dbo.CLIENTES.ID
WHERE (dbo.CUOTAS.FECHA_FINA BETWEEN @inicio AND @final_mes)
GROUP BY dbo.CUOTAS.ID_CLIENTE




al comprobar sintaxis me suelta que tengo que poner nombre, apellidos e
imagen en el group by. (Eso es lo primero q no entiendo) y luego intento
poner esos campos en el group by y me lanza el error de que los campos image
no pueden ponerse en group.

Hay alguna manera de reparar esto?

S@lu2 desde La Palma,,

Preguntas similare

Leer las respuestas

#1 Gux (MVP)
13/11/2007 - 16:25 | Informe spam
Por favor diga qué versión/ediciónd e SQL servr usa y cuál es el texto exacto
del mensaje de error.

Gustavo Larriera, Microsoft MVP
https://mvp.support.microsoft.com/profile/gux
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.



"Jectán Acosta" wrote:

Hola amigos, tengo un problemilla al hacer un select sobre un par de tablas.
Una de ella contiene un campo image y al hacer la consulta me lanza un error.



SELECT dbo.CUOTAS.ID_CLIENTE AS ID_CLIENTE, dbo.CLIENTES.NOMBRE AS
NOMBRE, dbo.CLIENTES.apellidos AS APELLIDOS,
MAX(dbo.CUOTAS.FECHA_FINA) AS ULTIMA,
dbo.CLIENTES.imagen
FROM dbo.CUOTAS INNER JOIN
dbo.CLIENTES ON dbo.CUOTAS.ID_CLIENTE = dbo.CLIENTES.ID
WHERE (dbo.CUOTAS.FECHA_FINA BETWEEN @inicio AND @final_mes)
GROUP BY dbo.CUOTAS.ID_CLIENTE




al comprobar sintaxis me suelta que tengo que poner nombre, apellidos e
imagen en el group by. (Eso es lo primero q no entiendo) y luego intento
poner esos campos en el group by y me lanza el error de que los campos image
no pueden ponerse en group.

Hay alguna manera de reparar esto?

desde La Palma,,



Respuesta Responder a este mensaje
#2 Carlos M. Calvelo
13/11/2007 - 16:30 | Informe spam
Hola Jectán,

On 13 nov, 15:05, Jectán Acosta
wrote:
Hola amigos, tengo un problemilla al hacer un select sobre un par de tablas.
Una de ella contiene un campo image y al hacer la consulta me lanza un error.

SELECT dbo.CUOTAS.ID_CLIENTE AS ID_CLIENTE, dbo.CLIENTES.NOMBRE AS
NOMBRE, dbo.CLIENTES.apellidos AS APELLIDOS,
MAX(dbo.CUOTAS.FECHA_FINA) AS ULTIMA,
dbo.CLIENTES.imagen
FROM dbo.CUOTAS INNER JOIN
dbo.CLIENTES ON dbo.CUOTAS.ID_CLIENTE = dbo.CLIENTES.ID
WHERE (dbo.CUOTAS.FECHA_FINA BETWEEN @inicio AND @final_mes)
GROUP BY dbo.CUOTAS.ID_CLIENTE

al comprobar sintaxis me suelta que tengo que poner nombre, apellidos e
imagen en el group by. (Eso es lo primero q no entiendo)



Después de haber aplicado el FROM y el WHERE, el GROUP BY agrupa
los resultados por ID_CLIENTE; o sea todos los registros con
el mismo ID_CLIENTE se agrupan en un registro. Las columnas que
no están el el GROUP BY tendrán que agregar sus valores en uno
por ID_CLIENT en este caso. Para FECHA_FINA has dicho como se debe
hacer eso (MAX()) pero para las demás columnas no.

y luego intento
poner esos campos en el group by y me lanza el error de que los campos image
no pueden ponerse en group.



No se puede agrupar por columnas de los tipos ntext, text, image
o bit.
Para mas información sobre los dos problemas, busca 'GROUP BY' en
la ayuda.



Hay alguna manera de reparar esto?




Te propongo lo siguiente:

SELECT FC.ID_CLIENTE, C.NOMBRE, C.APELLIDOS, FC.ULTIMA, C.IMAGEN
FROM CLIENTES C
INNER JOIN
(
SELECT ID_CLIENTE, MAX(FECHA_FINA) AS ULTIMA
FROM CUOTAS
WHERE FECHA_FINA BETWEEN @inicio AND @final_mes
GROUP BY ID_CLIENTE
) AS FC
ON C.ID = FC.ID_CLIENTE

Espero que no te dé errores esta consulta; no la he probado.

Saludos,
Carlos
Respuesta Responder a este mensaje
#3 Alejandro Mesa
13/11/2007 - 22:31 | Informe spam
Jectán Acosta,

Cuando usas la clausula "group by", las columnas que aparecen en la lista de
la sentencia "select", deben participar o en el grupo de columnas por las que
se agrupa o en alguna funcion de agrupacion. Eses es el primer error. Ahora,
las columnas tipo image no pueden participar en la lista de columnas en la
clausula "goup by", osea por las que se agrupa. En otras palabras, no se
puede agrupar por una columna tipo "image", ni tampoco usar una funcion de
agrupacion con ellas.

Puedes decirnos lo que tratas de hacer?

USE [Northwind]
GO

SELECT LastName, Photo, COUNT(*) AS cnt
FROM dbo.[Employees]
GROUP BY LastName
GO

Resultado:

Msg 8120, Level 16, State 1, Line 2
Column 'dbo.Employees.Photo' is invalid in the select list because it is not
contained in either an aggregate function or the GROUP BY clause.

SELECT LastName, Photo, COUNT(*) AS cnt
FROM dbo.[Employees]
GROUP BY LastName, Photo
GO

Resultado:

Msg 306, Level 16, State 2, Line 2
The text, ntext, and image data types cannot be compared or sorted, except
when using IS NULL or LIKE operator.


AMB


"Jectán Acosta" wrote:

Hola amigos, tengo un problemilla al hacer un select sobre un par de tablas.
Una de ella contiene un campo image y al hacer la consulta me lanza un error.



SELECT dbo.CUOTAS.ID_CLIENTE AS ID_CLIENTE, dbo.CLIENTES.NOMBRE AS
NOMBRE, dbo.CLIENTES.apellidos AS APELLIDOS,
MAX(dbo.CUOTAS.FECHA_FINA) AS ULTIMA,
dbo.CLIENTES.imagen
FROM dbo.CUOTAS INNER JOIN
dbo.CLIENTES ON dbo.CUOTAS.ID_CLIENTE = dbo.CLIENTES.ID
WHERE (dbo.CUOTAS.FECHA_FINA BETWEEN @inicio AND @final_mes)
GROUP BY dbo.CUOTAS.ID_CLIENTE




al comprobar sintaxis me suelta que tengo que poner nombre, apellidos e
imagen en el group by. (Eso es lo primero q no entiendo) y luego intento
poner esos campos en el group by y me lanza el error de que los campos image
no pueden ponerse en group.

Hay alguna manera de reparar esto?

desde La Palma,,



Respuesta Responder a este mensaje
#4 Jectán Acosta
14/11/2007 - 09:20 | Informe spam
Muchas gracias Carlos. Funciona a la perfección, la verdad es que no se me
hubiese ocurrido en 100 años.
Gracias de nuevo.:-)


"Carlos M. Calvelo" wrote:

Hola Jectan,

On 13 nov, 15:05, Jectan Acosta
wrote:
> Hola amigos, tengo un problemilla al hacer un select sobre un par de tablas.
> Una de ella contiene un campo image y al hacer la consulta me lanza un error.
>
> SELECT dbo.CUOTAS.ID_CLIENTE AS ID_CLIENTE, dbo.CLIENTES.NOMBRE AS
> NOMBRE, dbo.CLIENTES.apellidos AS APELLIDOS,
> MAX(dbo.CUOTAS.FECHA_FINA) AS ULTIMA,
> dbo.CLIENTES.imagen
> FROM dbo.CUOTAS INNER JOIN
> dbo.CLIENTES ON dbo.CUOTAS.ID_CLIENTE = dbo.CLIENTES.ID
> WHERE (dbo.CUOTAS.FECHA_FINA BETWEEN @inicio AND @final_mes)
> GROUP BY dbo.CUOTAS.ID_CLIENTE
>
> al comprobar sintaxis me suelta que tengo que poner nombre, apellidos e
> imagen en el group by. (Eso es lo primero q no entiendo)

Despuis de haber aplicado el FROM y el WHERE, el GROUP BY agrupa
los resultados por ID_CLIENTE; o sea todos los registros con
el mismo ID_CLIENTE se agrupan en un registro. Las columnas que
no estan el el GROUP BY tendran que agregar sus valores en uno
por ID_CLIENT en este caso. Para FECHA_FINA has dicho como se debe
hacer eso (MAX()) pero para las demas columnas no.

> y luego intento
> poner esos campos en el group by y me lanza el error de que los campos image
> no pueden ponerse en group.

No se puede agrupar por columnas de los tipos ntext, text, image
o bit.
Para mas informacisn sobre los dos problemas, busca 'GROUP BY' en
la ayuda.


>
> Hay alguna manera de reparar esto?
>

Te propongo lo siguiente:

SELECT FC.ID_CLIENTE, C.NOMBRE, C.APELLIDOS, FC.ULTIMA, C.IMAGEN
FROM CLIENTES C
INNER JOIN
(
SELECT ID_CLIENTE, MAX(FECHA_FINA) AS ULTIMA
FROM CUOTAS
WHERE FECHA_FINA BETWEEN @inicio AND @final_mes
GROUP BY ID_CLIENTE
) AS FC
ON C.ID = FC.ID_CLIENTE

Espero que no te di errores esta consulta; no la he probado.

Saludos,
Carlos



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida