Re: consulta de sql para postgresql

From: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
To: Hernan Chamorro Sevilla <admsistemas(at)corporacionquezada(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: consulta de sql para postgresql
Date: 2005-09-29 16:16:41
Message-ID: 20050929161641.GI5272@surnet.cl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

On Thu, Sep 29, 2005 at 09:20:05AM -0500, Hernan Chamorro Sevilla wrote:

Hola,

> (case when COALESCE(ARCLIENTE.CIUDAD,'*#')='*#' THEN ''
> else (SELECT NOMBRE FROM ARINDEX
> WHERE ARINDEX.EMPRESA=ARCARTERA.EMPRESA AND
> ARINDEX.DATA=ARCLIENTE.DATA AND
> ARINDEX.CODIGO=ARCLIENTE.CIUDAD) end ) AS NOM_CIUDAD,
> (case when COALESCE(ARCARTERA.BANCO,'*#')='*#' THEN ''
> else (SELECT NOMBRE FROM ARINDEX
> WHERE ARINDEX.EMPRESA = ARCARTERA.EMPRESA AND
> ARINDEX.DATA=ARCARTERA.DATA_B AND
> ARINDEX.CODIGO=ARCARTERA.BANCO)end) AS NOM_BANCO,
> (case when COALESCE(ARCARTERA.TARJETA,'*#')='*#' THEN ''
> else (SELECT NOMBRE FROM ARINDEX
> WHERE ARINDEX.EMPRESA = ARCARTERA.EMPRESA AND
> ARINDEX.DATA=ARCARTERA.DATA_T AND
> ARINDEX.CODIGO=ARCARTERA.TARJETA)end ) AS NOM_TARJETA ,
> ARCLIENTE.CODIGO1, ARCLIENTE.APELLIDO, ARCLIENTE.NOMBRE
>
> FROM TBBIT_CANCELACION ,ARCARTERA ,ARCLIENTE
> WHERE TBBIT_CANCELACION.can_secuencia =ARCARTERA.CAN_SECUENCIA (+)
> AND TBBIT_CANCELACION.can_cliente =ARCLIENTE.CODIGO (+)
> )
> ;
>
> me sujeriste utilizar el left join y el rigth join pero si fuera tan
> amable en este codigo cual seria el esquema del left join y el rigth
> porque en otros casos tengo que el primer campo tiene el (+).
> para mi caso es indispensable que vaya con este formato.

Creo que tendrias que reescribir el FROM de esta manera:

from (tbbit_cancelacion left join arcartera using (can_secuencia))
left join arcliente on (tbbit_cancelacion.can_cliente = arcliente.codigo)

No estoy 100% seguro si los parentesis alrededor del primer join son
necesarios o no. Observa que el WHERE en esta consulta quedaria vacio.

Una cosa que me llama la atencion es esto:

case when coalesce(algo, '*#') = '*#' THEN '' else (select foo) end

Me parece mucho mas natural escribirlo asi:

coalesce ((select foo), '')

o quizas,

CASE WHEN algo IS NULL THEN '' ELSE (select foo) END
(para ahorrarse el SELECT cuando el "algo" es null)

> y otro caso es:
> FROM (SELECT CODIGO, NOMBRE FROM ARINDEX, VW_FACNOTVTA
> WHERE ARINDEX.CODIGO = VW_FACNOTVTA.VENDEDOR
> AND ARINDEX.DATA='V' ORDER BY CODIGO) A ) as
> NOM_VENDEDOR,
> WHERE ROWNUM =1) as NOM_VENDEDOR,
>
> en oracle utilizo el ROWNUM y en postgresql cual seria la funcion o de
> que forma puedo comparar.

Probablemente deberias hacer "LIMIT 1" en lugar de WHERE ROWNUM=1 ...

--
Alvaro Herrera http://www.PlanetPostgreSQL.org
Criptografía: Poderosa técnica algorítmica de codificación que es
empleada en la creación de manuales de computadores.

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2005-09-29 16:36:54 Re: Ordenació
Previous Message Manuel Sugawara 2005-09-29 16:15:47 Re: Ordenació