FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Dudas con Union
Buenas Dias:
Gracias por leer este hilo, mi duda consiste en que tengo que realizar una consulta en una tabla de ventas donde me calcule la cantidad de ventas con descuento con su valor, asi como la cantidad total de ventas con su valor total, realice dos consultas y las uni pero al realizarlas me crean datos repetidos. La consulta es la siguiente: SELECT D.FECHAVENTA, D.CODIGOCAJA, D.CODIGOCAJERO, D.CODIGOTIPOARTICULO, 0 AS CANTIDADDESCUENTO, 0.0 AS DESCUENTO, COUNT(*) AS CANTIDADVENTAS, SUM(D.CANTIDAD*D.PRECIOUNITARIO) AS VENTAS FROM DetalleEncabezado D WHERE (D.FECHAVENTA>'07/01/04') GROUP BY D.FECHAVENTA, D.CODIGOCAJA, D.CODIGOCAJERO, D.CODIGOTIPOARTICULO UNION SELECT D.FECHAVENTA, D.CODIGOCAJA, D.CODIGOCAJERO, D.CODIGOTIPOARTICULO, COUNT(*) AS CANTIDADDESCUENTO, SUM(( (D.CANTIDAD*D.PRECIOUNITARIO)*(D.Descuento/100))+( (D.CANTIDAD*D.PRECIOUNITARIO)- (D.CANTIDAD*D.PRECIOUNITARIO*(D.Descuento/100)))*(D.Descuentoencabezado/100)) AS DESCUENTO, 0 AS CANTIDADVENTAS, 0.0 AS VENTAS FROM DetalleEncabezado D WHERE (D.FECHAVENTA>'07/01/04') AND ((D.Descuento > 0) OR (D.descuentoencabezado>0)) GROUP BY D.FECHAVENTA, D.CODIGOCAJA, D.CODIGOCAJERO, D.CODIGOTIPOARTICULO y el resultado que me da es: Los campos son: FECHAVENTA CODIGOCAJA CODIGOCAJERO CODIGOTIPOARTICULO CANTIDADDESCUENTO DESCUENTO CANTIDADVENTAS VENTAS La información es: 02/07/2004,001,AUX2,01,0,"0,000",253,"654710,000" 02/07/2004,001,AUX2,01,75,"5716,500",0,"0,000" 02/07/2004,001,AUX2,02,0,"0,000",9,"41210,000" 02/07/2004,001,AUX2,02,3,"544,500",0,"0,000" Mi idea es que me saliera un solo registro por agrupacion y aqui me salen dos que tienes descuento y ventas, los campos en negrillas son los que agrupo. Sinceramente no se que estoy haciendo mal. Gracias por su colaboracion Rogerio |
#2
|
|||
|
|||
SELECT TODO.FECHAVENTA, TODO.CODIGOCAJA, TODO.CODIGOCAJERO,
TODO.CODIGOTIPOARTICULO, SUM(TODO.CANTIDADDESCUENTO), SUM(TODO.DESCUENTO), SUM(TODO.CANTIDADVENTAS), SUM(TODO.VENTAS) FROM ( SELECT D.FECHAVENTA, D.CODIGOCAJA, D.CODIGOCAJERO, D.CODIGOTIPOARTICULO, 0 AS CANTIDADDESCUENTO, 0.0 AS DESCUENTO, COUNT(*) AS CANTIDADVENTAS, SUM(D.CANTIDAD*D.PRECIOUNITARIO) AS VENTAS FROM DetalleEncabezado D WHERE (D.FECHAVENTA>'07/01/04') GROUP BY D.FECHAVENTA, D.CODIGOCAJA, D.CODIGOCAJERO, D.CODIGOTIPOARTICULO UNION SELECT D.FECHAVENTA, D.CODIGOCAJA, D.CODIGOCAJERO, D.CODIGOTIPOARTICULO, COUNT(*) AS CANTIDADDESCUENTO, SUM(( (D.CANTIDAD*D.PRECIOUNITARIO)*(D.Descuento/100))+( (D.CANTIDAD*D.PRECIOUNITARIO)- (D.CANTIDAD*D.PRECIOUNITARIO*(D.Descuento/100)))*(D.Descuentoencabezado/100)) AS DESCUENTO, 0 AS CANTIDADVENTAS, 0.0 AS VENTAS FROM DetalleEncabezado D WHERE (D.FECHAVENTA>'07/01/04') AND ((D.Descuento > 0) OR (D.descuentoencabezado>0)) GROUP BY D.FECHAVENTA, D.CODIGOCAJA, D.CODIGOCAJERO, D.CODIGOTIPOARTICULO ) TODO |
#3
|
||||
|
||||
Hola.
A ambos les recomiendo que usen la etiqueta [ sql ] para publicar sentencias, puesto que son mucho mas legibles ya que se resalta su sintaxis y es posible indentarlas. El resutlado es como este:
Por otro lado, Rogerio, hay dos cosas que te falta mencionar:
hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#4
|
|||
|
|||
Dudas con Union
Gracias por el consejo me ha resultado de lo mas apropiado.
Pido disculpas por mi mala utilización de las etiquetas en los próximos mensaje tratare de utilizarlas de la forma correcta. Rogerio |
#5
|
|||
|
|||
Inconvenientes con SQL UNION
Buenas:
Que pena me di cuenta que la información que made estaba incompleta. 1. El motor de la Base es FireBird 2. Lo que deseo realizar es tener en un solo registros las ventas, la cantidad de ventas, el descuento y la cantidad de descuento. Código:
SELECT FECHAVENTA, CAJA, CODIGOCAJERO, TIPOARTICULO, SUM(CANTIDADDESCUENTO) AS CANTIDADDESCUENTO, SUM(DESCUENTO) AS DESCUENTO, SUM(CANTIDADVENTAS) AS CANTIDADVENTAS, SUM(VENTAS) AS VENTAS FROM ( SELECT D.FECHAVENTA, C.NOMBRE AS CAJA, D.CODIGOCAJERO, T.CODIGO||T.NOMBRE AS TIPOARTICULO, 0 AS CANTIDADDESCUENTO, 0.0 AS DESCUENTO, COUNT(*) AS CANTIDADVENTAS, SUM(D.CANTIDAD*D.PRECIOUNITARIO) AS VENTAS FROM DetalleEncabezado D, CAJA C, TIPOARTICULO T WHERE (D.FECHAVENTA='07/08/04') AND (C.CODIGO=D.CODIGOCAJA) AND (T.CODIGO=D.CODIGOTIPOARTICULO) GROUP BY D.FECHAVENTA, C.NOMBRE, D.CODIGOCAJERO, T.CODIGO,T.NOMBRE UNION SELECT D.FECHAVENTA, C.NOMBRE AS CAJA, D.CODIGOCAJERO, T.CODIGO||T.NOMBRE AS TIPOARTICULO, COUNT(*) AS CANTIDADDESCUENTO, SUM(( (D.CANTIDAD*D.PRECIOUNITARIO)*(D.Descuento/100))+( (D.CANTIDAD*D.PRECIOUNITARIO)- (D.CANTIDAD*D.PRECIOUNITARIO*(D.Descuento/100)))*(D.Descuentoencabezado/100)) AS DESCUENTO, 0 AS CANTIDADVENTAS, 0.0 AS VENTAS FROM DetalleEncabezado D, CAJA C, TIPOARTICULO T WHERE (D.FECHAVENTA='07/08/04') AND (C.CODIGO=D.CODIGOCAJA) AND (T.CODIGO=D.CODIGOTIPOARTICULO) AND ((D.Descuento > 0) OR (D.descuentoencabezado>0)) GROUP BY D.FECHAVENTA, C.NOMBRE, D.CODIGOCAJERO, T.CODIGO,T.NOMBRE ) GROUP BY FECHAVENTA, CAJA, CODIGOCAJERO, TIPOARTICULO Gracias por la colaboración Rogerio |
#6
|
||||
|
||||
Cita:
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#7
|
|||
|
|||
Dudas con Union
Hola a Todos:
De pronto no me hice entender con claridad y pido disculpas: A las pregunta que me hicieron respondo:
Si tengo algun error de etiqueta por favor comunicarmelo y si no entiende por favor aclararla gracias Rogerio Última edición por jachguate fecha: 14-07-2004 a las 22:55:34. |
#8
|
||||
|
||||
Firebird, no soporta lo que te ha sugerido Bagy, que en la jerga de Oracle se llaman Inline Views.
Lo que no me queda claro, es que al plantear la unión de los dos queryes presentados, inevitablemente habrán datos repetidos, y no especificas como queres agruparlos (sumandolos, restandolos, sacando promedio, etc). Me llama la atención el hecho de que la segunda consulta es un subconjunto de la primera. Es decir, todo lo que arroje la segunda consulta ya estará dado en la primera (tomando en cuenta solamente los campos de agrupación expuestos, claro). Si esto no es lo que buscas, como supongo, lo que te hace falta es excluir de la primera consulta los que devolverá la segunda. algo como:
He preferido usar el operador not, y no poner directamente la negación de la condición, que involucraría, además de comparar <= 0, que incluya los nulos (si tus campos lo permiten). Por último, la etiqueta correcta para publicar sentencias sql es [ sql ], y no existe la etiqueta [ indent ] que has usado en tu post anterior, que lo he editado para que tenga la presentación que (supongo) esperabas porque, probablemente al cortar y pegar, has movido de lugar otras etiquetas. hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#9
|
|||
|
|||
Dudas con Union
Gracias por tu respuesta.
El problema que tengo es que tengo una tabla de factura y me piden hallar el valor de las ventas Totales, Cantidad de Facturas, El Valor de los Descuentos y cuantas facturas tienen descuento, todas estas deben estar agrupadas por Fecha, Caja, Cajero y por Tipo de Articulo, mi deseo es tener un solo registro con los datos de Fecha, Caja, Cajero, Tipo de Articulo, Valor Ventas, Cantidad de Ventas, Valor Descuento, Cantidad Descuento. La solución que tome fue crear una tabla temporal con la consulta y sobre esta realizar una nueva consulta de agrupación por Fecha, Caja, Cajero y Tipo de Articulo y Totalizando las Ventas, Cantidad de Ventas, Descuento y Cantidad de Descuento. Esta solución sirve pero deseaba evitarme la creación de la tabla temporal. Al momento de realizar las consulta de unión los datos que arrojan son: Código:
Fecha Caja Cajero Tipo CantidadDes Descuento CantidadVen Ventas 02/07/2004 1 AUX2 1 0 0 253 654710 02/07/2004 1 AUX2 1 75 5716,5 0 0 Código:
Fecha Caja Cajero Tipo CantidadDes Descuento CantidadVen Ventas 02/07/2004 1 AUX2 1 75 5716,5 253 654710 Gracias por la colaboración Rogerio |
#10
|
||||
|
||||
En ib/fb tenes dos caminos:
Hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#11
|
|||
|
|||
Union
Gracias por tu colaboración,
Las observaciones han sido muy oportunas. Hasta pronto Rogerio |
|
|
|