![]() |
consulta revelde!
Hola!
Necesito hacer una consulta para obtener el nº total de artículos vendidos en Tickets, Facturas y Total (Tickets+Facturas), para ello uso esta consulta: Código PHP:
TotalFactura = 16 TotalTicket = 1 Total = 333 Una de dos, o el bicho este no sabe sumar;) o yo hago algo mal:p musas asias :) |
Hola de nuevo.
A ver llegados a este punto solo veo dos soluciones posibles. 1.- Que te crees un Procedimiento almacenado. Es la que te recomiendo, con lo cual no tendrás problemas de tener que hacerlo todo en una sola consulta con unions. De hecho con las dos primeras ya basta y la tercera la puedes hacer como suma de las variables que recojan los valores de las dos primeras. 2.- Crearte una consulta anidad, no me gusta mucho pero funciona, de este estilo. SELECT 'TOTAL', (SELECT Sum(df.cantidad) FROM detallesFactura AS df, articulos AS a WHERE (a.Marca='84-8431-594-0') AND ((df.id_articulo=a.id_articulo))) + (SELECT Sum(dt.cantidad) FROM detallesTicket AS dt, articulos AS a WHERE (a.Marca='84-8431-594-0') AND ((dt.id_articulo=a.id_articulo)) ) FROM detallesFacturas PD: Creo que el GROUP BY te sobra en las consultas. Más que nada por que ya le estás forzando en el WHERE a que sea una determinada. PD2: Creo recordar que utilizabas Interbase, corrigeme si me equivoco, te lo digo por que en vez de enlazar con la tabla de artículos como lo haces yo lo haría en el FROM con clausulas INNER. Es más efectivo y eficiente. Saludos |
Buenos Días, prueba cambiando lo siguiente:
......... SELECT 'Total', Sum(dt.cantidad+df.cantidad) FROM detallesTicket AS dt, detallesFactura AS df, articulos AS a WHERE (a.Marca='84-8431-594-0') AND ((df.id_articulo=a.id_articulo) OR (dt.id_articulo=a.id_articulo)); Un saludo. |
Hola de nuevo
Cita:
Uso access, Aprendiz; usando la consulta anidada sí me obtiene el valor real, lo que pasa que no veas como queda la consulta de liosa:p La siguiente consulta obtiene los valores que buscaba Código PHP:
Muchas gracias los dos por la ayuda :) Salu2 |
La consulta anterior funciona al pelo.. siempre que haya artículos de la marca indicada en AMBAS tablas! si en alguna de ellas no hay artículos de la marca indicada nos devuelve como resultado NULL! :( me imagino que sera porque el resultado de NULL+valor=NULL, pero no lo tengo muy claro. ::confused:
Si fuera ese el problema, ¿Cómo podría hacer para que en vez de NULL la consulta me devolviese 0 en caso de no encontrar ningún registro? |
Buenos Días, como estas utilizando Access puedes utilizar la siguiente sentencia:
En el campo que puede que te de NULL pones lo siguiente: IIf([campo]=NULL,0,[campo]) En tu caso: SELECT 'TotalFactura', iif(Sum(df.cantidad)=NULL,0,Sum(df.cantidad)) as Totales FROM detallesFactura AS df, articulos AS a WHERE (a.Marca='84-8431-594-0') AND ((df.id_articulo=a.id_articulo)) UNION SELECT 'TotalTicket', iif(Sum(dt.cantidad)=NULL,0,Sum(dt.cantidad)) FROM detallesTicket AS dt, articulos AS a WHERE (a.Marca='84-8431-594-0') AND ((dt.id_articulo=a.id_articulo)) UNION SELECT 'TOTAL', (SELECT iif(Sum(df.cantidad)=NULL,0,Sum(df.cantidad)) FROM detallesFactura AS df, articulos AS a WHERE (a.Marca='84-8431-594-0') AND ((df.id_articulo=a.id_articulo)))+(SELECT iif(Sum(dt.cantidad)=NULL,0,Sum(dt.cantidad)) FROM detallesTicket AS dt, articulos AS a WHERE (a.Marca='84-8431-594-0') AND ((dt.id_articulo=a.id_articulo))) FROM detallesFactura; No la he probado, pero debe funcionar. Un saludo. |
gracias por responder tan rapido:)
No me funciona, me sigue devolviendo NULL y por tanto no hace la suma correctamente. Por ejemplo, para simplificar, imagina que tengo una tabla con 2 campos cantidad(Entero) y nombre(texto) con los siguientes datos: nombre cantidad a --------- 5 a --------- 2 b --------- 4 b ---------- 2 si le aplicamos la siguiente consulta el resultado sería 7 Código PHP:
muchas gracias de nuevo |
Hola de nuevo, acabo de probar de manera muy simple la consulta, utilizando una tabla con dos campos nombre y cantidad. La tabla tiene los siguientes datos:
Código:
nombre cantidad Código:
SELECT iif(sum(can)=NULL,99,sum(can)) Un saludo. |
olé!!
ya funciona esto!! es fallo estaba en sum(can)=NULL asi no me funciona, pero si pongo sum(can) IS NULL sip!:D muchisimas grasias:) si alguna vez venis para badajoz os debo por lo menos a 15 servesillas:p salu2 |
La franja horaria es GMT +2. Ahora son las 04:10:32. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi