Re: Consulta SQL algo compleja

From: Jaime Casanova <systemguards(at)yahoo(dot)com>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Consulta SQL algo compleja
Date: 2004-12-13 22:41:56
Message-ID: 20041213224156.15186.qmail@web50008.mail.yahoo.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

--- Lynkx <lynkx(at)surnet(dot)cl> escribió:

> SELECT DISTINCT
> s.cod_sucursal, s.nombre,
> (SUM(f.valor) - SUM(n.valor)) AS sum_valor
>
> FROM facturas f LEFT JOIN notas_credito n ON
> (f.num_fact = n.num_fact
> AND f.cod_sucursal = n.cod_sucursal), sucursales s
>
> WHERE f.cod_sucursal = s.cod_sucursal
>
> GROUP BY
> s.cod_sucursal, s.nombre
>
> Y devuelve lo sgte:
> 1 matriz 125
> 2 sede (no hay valor)
>

1) No se para que usas el distinct, de todas formas ya
estas haciendo un group by y el efecto va a ser el
mismo. NO se si postgres sea lo suficientemente pilas
para saber que eso esta de mas en todo caso sacalo.

2) Ahora tu problema, el segundo sum (el de la
sucursal 2) retorna null por que no hay notas de
credito en esa sucursal y cualquier valor sumado,
restado, multiplicado, dividido, etc, etc por null se
hace NULL!!

Solucion: en informix y en oracle hay una funcion
llamada nvl que se usaba para estos casos. dicha
funcion no existe en postgres y no se que mecanismo
han puesto para reemplazarla yo escribi una funcion
nvl para mi aqui te doy el codigo

CREATE OR REPLACE FUNCTION "public"."nvl" (numeric,
numeric) RETURNS numeric AS'
select case when $1 is null then $2 else $1
end;
'LANGUAGE 'sql' VOLATILE CALLED ON NULL INPUT SECURITY
INVOKER;

y tu select quedaria + o - asi:

SELECT s.cod_sucursal, s.nombre, (SUM(f.valor) -
nvl(SUM(n.valor)), 0) AS sum_valor
FROM facturas f LEFT JOIN notas_credito n
ON (f.num_fact = n.num_fact AND
f.cod_sucursal = n.cod_sucursal),
sucursales s
WHERE f.cod_sucursal = s.cod_sucursal
GROUP BY s.cod_sucursal, s.nombre

Atentamente,
Jaime Casanova

_________________________________________________________
Do You Yahoo!?
Información de Estados Unidos y América Latina, en Yahoo! Noticias.
Visítanos en http://noticias.espanol.yahoo.com

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Lynkx 2004-12-14 09:27:57 Re: RV: Consulta SQL algo compleja
Previous Message Jaime Casanova 2004-12-13 19:38:29 Re: Acentos en postgres