Re: Consulta compleja

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.

In response to

Responses

Browse pgsql-es-ayuda by date

  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