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
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 |