From: | "Leo Gamez CCD Desarrollo" <desarrollo(at)ccdasesores(dot)e(dot)telefonica(dot)net> |
---|---|
To: | <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | RV: Consulta SQL algo compleja |
Date: | 2004-12-14 09:46:08 |
Message-ID: | 6556315E9E43C34C98E67355DF3C5C050DC817@ZE3BUZON020.e.telefonica.net |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Hola,
Creo que existe una funcion en postgres para detectar un valor nulo, es coalesce(). Tambien funciona en mysql. Adjunto su explicacion de la documentacion online. Buen provecho.
http://www.postgresql.org/docs/7.4/static/functions-conditional.html
9.12.2. COALESCE
COALESCE(value [, ...])
The COALESCE function returns the first of its arguments that is not null. Null is returned only if all arguments are null. This is often useful to substitute a default value for null values when data is retrieved for display, for example:
SELECT COALESCE(description, short_description, '(none)') ...
Like a CASE expression, COALESCE will not evaluate arguments that are not needed to determine the result; that is, arguments to the right of the first non-null argument are not evaluated.
------------------------------------------------------
Saludos,
Leo
PD: Quiza alguien se ofenda porque puedo no pertenecer a la lista de correo. Tuve problemas cuando me suscribi, pero desde que Alvaro Herrera me hecho una mano para arreglarlo, no he vuelto a comprobar mi status. Sirva este correo para comprobarlo.
________________________________
De: pgsql-es-ayuda-owner(at)postgresql(dot)org en nombre de Jaime Casanova
Enviado el: lun 13/12/2004 23:41
Para: pgsql-es-ayuda(at)postgresql(dot)org
Asunto: Re: [pgsql-es-ayuda] Consulta SQL algo compleja
--- 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
---------------------------(end of broadcast)---------------------------
TIP 6: ¿Has buscado en los archivos de nuestra lista de correo?
From | Date | Subject | |
---|---|---|---|
Next Message | Lynkx | 2004-12-14 11:04:29 | Re: RV: Consulta SQL algo compleja |
Previous Message | Lynkx | 2004-12-14 09:27:57 | Re: RV: Consulta SQL algo compleja |