Skip site navigation (1) Skip section navigation (2)

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 (view raw or flat)
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

pgsql-es-ayuda by date

Next:From: Alvaro HerreraDate: 2005-09-29 16:36:54
Subject: Re: Ordena?==?iso-8859-1?B?Y2nz
Previous:From: Manuel SugawaraDate: 2005-09-29 16:15:47
Subject: Re: Ordenació

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group