RV: Consulta SQL algo compleja

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?

http://archives.postgresql.org/pgsql-es-ayuda

Responses

Browse pgsql-es-ayuda by date

  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