FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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. |
#2
|
||||
|
||||
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 Código:
Select Cliente, Sum(Importe) as Total from Facturas Group By Cliente Cliente Total -------- ------- PEPE 500 MANOLO 1200 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. |
#3
|
||||
|
||||
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). |
#4
|
|||
|
|||
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. |
|
|
|