From: | Ricardo Fuentes Pereira <rfuentesp(at)gmail(dot)com> |
---|---|
To: | Jorge Vidal Martinez <jvm(at)utenet(dot)com(dot)ar> |
Cc: | pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Re: Consulta compleja |
Date: | 2005-05-31 13:49:47 |
Message-ID: | 429C6B7B.5050502@gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Jorge Vidal Martinez escribió:
> Ricardo, estas totalizado las las sx_fact_compra y las sc_fact_gastos
> por RUC y luego al hacer join con las facturas y agruparlas por un
> atributo de esta tabla te repite este total como tantas facturas tengas.
>
> Intenta
>
> SELECT
> A.ruc, A.nombre ,
> ( COALESCE(SUM(B.valor_neto * (1 + B.valor_iva)), 0) +
> COALESCE(SUM(C.valor_neto * (1 +C. valor_iva)), 0) ) AS sum_valor
> FROM
> sx_prov prov A
> LEFT JOIN
> sx_fact_compra B ON A.rut = B.rut
> LEFT JOIN
> sx_fact_gasto C ON A.rut = C.rut
> GROUP BY
> A.ruc, A.nombre
>
> El LEFT te devuelve todas las tuplas que esten en la tabla primaria
> esten o no en la secundaria..
>
> Por lo que los proveedores que no tengan facturas de Compras o Gastos,
> te aparecen en el resultado.
>
> Saludos
> Jorge
>
Hola. Gracias por responder.
Lo probé, pero para los sgtes datos:
test=# select * from sx_prov;
rut | nombre
------------+---------
11111111-1 | Ricardo
22222222-2 | Andres
(2 filas)
test=# select * from sx_fact_compra;
num_fact | rut | valor_neto | valor_iva
----------+------------+------------+-----------
1 | 11111111-1 | 150 | 0.19
2 | 11111111-1 | 250 | 0.19
3 | 22222222-2 | 50 | 0.19
4 | 22222222-2 | 300 | 0.19
(4 filas)
num_fact | rut | valor_neto | valor_iva
----------+------------+------------+-----------
1 | 11111111-1 | 100 | 0.19
2 | 11111111-1 | 200 | 0.19
(2 filas)
me devuelve
test=# SELECT
test-# A.rut, A.nombre ,
test-# ( COALESCE(SUM(B.valor_neto * (1 + B.valor_iva)), 0) +
test(# COALESCE(SUM(C.valor_neto * (1 +C. valor_iva)), 0) ) AS sum_valor
test-# FROM
test-# sx_prov A
test-# LEFT JOIN
test-# sx_fact_compra B ON (A.rut = B.rut)
test-# LEFT JOIN
test-# sx_fact_gasto C ON (A.rut = C.rut)
test-# GROUP BY
test-# A.rut, A.nombre ;
rut | nombre | sum_valor
------------+---------+-----------
11111111-1 | Ricardo | 1666
22222222-2 | Andres | 416.5
(2 filas)
Lo cual es erroneo para el caso del rut 11111111-1 pues debiera ser 833,
como si es correcto con mi otra consulta (ver mail anterior)
Saludos.
From | Date | Subject | |
---|---|---|---|
Next Message | oliver | 2005-05-31 13:55:06 | RE: Log de actividades |
Previous Message | Martín Marqués | 2005-05-31 13:41:45 | Re: Log de actividades |