Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-08-2003
jfloro jfloro is offline
Miembro
 
Registrado: may 2003
Posts: 17
Poder: 0
jfloro Va por buen camino
Consulta usando group by

Hola, tengo la siguiente consulta a la que quiero añadir unos datos mas de las lineas de factura(concretamente sumatorios de cantidades) y inicialmente tengo esto:

Select F.IdFactura,F.IdCliente,C.Representante,F.Total,C.DNICIF,
R.IdComercial, F.Fecha, C.Nombre, F.Subtotal,F.SubtotalAlbaran, R.Comision,
F.IVA,(F.SubtotalAlbaran * R.Comision) / 100 as vComision,
((F.SubtotalAlbaran * R.Comision) / 100 * R.IRPF) / 100 as vIRPF
from Factura F , Clientes C,Comerciales R
where F.IdCliente = C.IdCliente and C.Representante =:Comercial
and F.Fecha>=:FechaDesde and F.Fecha<=:FechaHasta
and R.IdComercial =:Comercial
Order By F.Fecha

// Calcula comisiones de comerciales, pero quiero sumar por importes de lineas y al añadir la clausula GROUP BY me da un error

Añado lo siguiente:

Select F.IdFactura,F.IdCliente,C.Representante,F.Total,C.DNICIF,
R.IdComercial, F.Fecha, C.Nombre, F.Subtotal,F.SubtotalAlbaran, R.Comision,
F.IVA,(F.SubtotalAlbaran * R.Comision) / 100 as vComision,
((F.SubtotalAlbaran * R.Comision) / 100 * R.IRPF) / 100 as vIRPF
from Factura F , Clientes C,Comerciales R
where F.IdCliente = C.IdCliente and C.Representante =:Comercial
and F.Fecha>=:FechaDesde and F.Fecha<=:FechaHasta
and R.IdComercial =:Comercial

GROUP BY F.IdFactura,F.IdCliente,C.Representante,F.Total,C.DNICIF,
R.IdComercial, F.Fecha, C.Nombre, F.Subtotal,F.SubtotalAlbaran, R.Comision,F.IVA
Order By F.Fecha

Y El error que me sale en pantalla es este:

Expressions in group by are not supported.

¿Creo que me sobran campos o me faltan en el GROUP BY??
¿Cuales son y como he de ponerlos??
Gracias

Resuelto esto podre introducir la parte relacionada con las lineas de factura.
Responder Con Cita
  #2  
Antiguo 01-08-2003
Avatar de __marcsc
__marcsc __marcsc is offline
Miembro
 
Registrado: may 2003
Ubicación: Girona
Posts: 577
Poder: 22
__marcsc Va por buen camino
Hola,

a ver un pequeño ejemplo de Group By...

Digamos que el group by lo qe hace es aplicar una función a un conjunto de valores para devolver un resultado.

Digamoslo así

Función(registro 1, ..., registro N) -> Resultado.

El número de registros a los que se aplica la función viene determinado por los campos por los que se agrupa. Por ejemplo:

Código:
Select * from Facturas

Cliente      Factura                         Importe
-------      --------------------            ----------
PEPE         1                               300
PEPE         2                               200
MANOLO       3                               200
MANOLO       4                               1000
Ahora, si lo que queremos es agrupar por cliente:

Código:
Select Cliente, Sum(Importe) as Total from Facturas
Group By Cliente

Cliente        Total
--------       -------
PEPE           500
MANOLO         1200
Es decir, lo que ha hecho ha sido agrupar todas las facturas de un mismo cliente y para ese grupo y sumar todos los importes.


Si revisas tu segundo SQL, es decir, el que tiene el Group by, observarás que no tienes ninguna función de agregado, con lo que realmente no tiene sentido utilizar el group by. Es decir, para qué agrupar si no tienes ningún dato extra que obtener?

Seguramente lo que realmente quieres hacer es calcular la suma de los albaranes y de las comisiones.

A ver si con esto ya puedes conseguir los datos que quieres. Para cualquier otra duda aquí estamos.

Saludos.

Última edición por __marcsc fecha: 01-08-2003 a las 18:32:54.
Responder Con Cita
  #3  
Antiguo 01-08-2003
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 23
guillotmarc Va por buen camino
Hola.

Una posible razón para utilizar una consulta con group by, pero sin ninguna función de agregado, puede ser porqué en el resultado no queremos que se repitan registros.

Aunque en este caso es más elegante (y seguramente más eficiente) utilizar la clausula distinct.

select poblacion, provincia
from clientes
group by poblacion, provincia

equivale a :

select distinct poblacion, provincia from clientes

No indicas que base de datos utilizas, en un Servidor SQL tu consulta con una expresión formada por campos presentes en la lista del group by, no debería darte ningún problema. Si utilizas en cambio alguna tabla plana como Paradox, etc. ... quizá estas consultas no estén soportadas.

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #4  
Antiguo 08-08-2003
dabas dabas is offline
Miembro
 
Registrado: jun 2003
Ubicación: En mi casa
Posts: 39
Poder: 0
dabas Va por buen camino
resumiendo, creo que se haria de esta manera:

modificar el select aplicando la funcion suma a las cantidades que se desean sumar,

Select F.IdFactura,
F.IdCliente,
C.Representante,
sum(F.Total),
C.DNICIF,
R.IdComercial,
F.Fecha,
C.Nombre,
sum(F.Subtotal),
sum(F.SubtotalAlbaran)
..........

el la linea group by agrupar por el resto de campos que no llevan funcion de agregado.

espero haber ayudado.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 16:55:18.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi