Skip site navigation (1) Skip section navigation (2)

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 (view raw or flat)
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

pgsql-es-ayuda by date

Next:From: oliverDate: 2005-05-31 13:55:06
Subject: RE: Log de actividades
Previous:From: Martín MarquésDate: 2005-05-31 13:41:45
Subject: Re: Log de actividades

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group