SQL - como puedo hacer esta consulta

   
Vista:

como puedo hacer esta consulta

Publicado por shannon (2 intervenciones) el 13/06/2011 18:34:21
Hola foristas,

tengo estas dos tablas

TABLA CLIENTE
COD_CLIENTE

01
05
01


TABLA DETALLE

CODIGO_PRODUCTO CANTIDAD PRECIO_VENTA TIPO_TRANSACCION COD_CLIENTE
AMM001 2 3.00 V(VENTA) 05
AMM029 1 18.00 V 01
AMM029 1 7.00 A(ABONO) 01
ZRF009 1 5.00 V 01

con estas tablas quiero hacer un query en donde me de el siguiente resultado


COD_CLIENTE SALDO
01 16.00
05 5.00

como seria este query?

gracias por su ayuda
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

como puedo hacer esta consulta

Publicado por shannon (2 intervenciones) el 13/06/2011 18:37:10
disculpen se perdio el formato de las tablas al enviar los datos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

como puedo hacer esta consulta

Publicado por Miguel (16 intervenciones) el 17/06/2011 13:47:20
1
2
3
4
5
6
7
8
9
SELECT Cliente, SUM(Factor*Importe) AS Saldo
FROM
(SELECT TC.COD_CLIENTE AS Cliente,
(CASE TD.TIPO_TRANSACCION WHEN 'V' THEN 1 ELSE -1 END) AS Factor,
SUM(TD.CANTIDAD*TD.PRECIO_VENTA) AS Importe
FROM TABLACLIENTE AS TC
INNER JOIN TABLADETALLE AS TD ON TC.COD_CLIENTE=TD.COD_CLIENTE
GROUP BY TC.COD_CLIENTE, TD.TIPO_TRANSACCION) AS ImportesPorTipo
GROUP BY Cliente


Esto te funciona seguro.

Saludos,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

como puedo hacer esta consulta

Publicado por xve (238 intervenciones) el 13/06/2011 20:26:19
shannon, seria un simple join, no?

algo así:

1
2
SELECT PRECIO_VENTA,Cod_cliente
FROM TCliente LEFT JOIN TDetalle ON TCliente.Cod_cliente=TDetalle.Cod_cliente
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

como puedo hacer esta consulta

Publicado por Leonardo Josué (878 intervenciones) el 13/06/2011 20:58:27
Hola Shannon:

Comencemos desde un principio. En tu tabla CLIENTE tienes dos cod_cliente 01, lo cual es un problema, creo que esto fue simplemente un error a la hora de poner los datos, pero deberías aclararnos este punto.

Segundo, no nos explicas cómo es que que estás calculando el saldo de la tabla final, puedo suponer que lo que estás haciendo es sumar todas las ventas (aquellas con TIPO_TRANSACCION = V) y restas todos los abonos (TIPO_TRANSACCION = A) sin embargo para el caso del cliente 05 el saldo debería ser 2 * 3.00 (CANTIDAD * PRECIO_VENTA) = 6.00 y no 5.00 como lo indicas en el ejemplo, correcto???

Tercero, no comentas qué motor de BD estás utilizando, aunque la sintaxis es muy parecida entre cada uno de ellos existen diferencias importantes, por lo que sería conveniente que siempre que publiques alguna pregunta en el foro especifiques este punto.

Finalmente, es conveniente que publiques alguna consulta en la hayas comenzado a trabajar, para partir de ella y ayudarte a afinar lo que haga falta.

Y ahora si entrando en materia, la consulta creo que sería más o menos así:

1
2
3
4
5
6
7
8
9
select c.cod_cliente, sum(
case when D.tipo_transaccion = 'V'
then (D.cantidad * D.precio_venta)
else (-1 * D.cantidad * D.precio_venta)
end
) saldo
 from CLIENTE C inner join
DETALLE D on C.cod_cliente = D.cod_cliente
group by c.cod_cliente


Agrupas por COD_CLIENTE y antes de hacer la sumatoria se verifica con el CASE si se trata de una Venta o un Abono, con ventas se suma y en el caso de los abonos se resta (es por eso que multiplico por un -1).

Traté de que fuera lo más estándar posible, para que no tengas problema en ejecutarlo en el DBMS que estés utilizando. Si continuas con problemas nos lo haces saber.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

como puedo hacer esta consulta

Publicado por Nes (2 intervenciones) el 13/06/2011 20:56:29
Yo creo que es algo mas complicado que eso xve...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

como puedo hacer esta consulta

Publicado por NES (2 intervenciones) el 14/06/2011 00:05:37
OTRA OPCION, YA QUE TIENES TODOS LOS DATOS EN LA TABLA DE DETALLES QUEDARIA ASI:

SELECT CLIENTE, SUM(TOT) AS SALDO
FROM (SELECT CLIENTE, CASE WHEN TIPO_TRANS = 'V' THEN CANTIDAD * PRECIO_VTA ELSE - 1 * CANTIDAD * PRECIO_VTA END AS TOT
FROM dbo.VENTAS_DETALLE) AS TABLA1
GROUP BY CLIENTE


DONDE CLIENTE ES EL CODIGO DEL CLIENTE, SALUDOS
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar