Determinar en un Select si el registro existe de una subconsulta POR FAVOR !!!!!!

07/05/2009 - 01:46 por Penta | Informe spam
Estimados.
Utilizo SS2000 SP4

Tengo una tabla llamada clientes que contiene:

cod_cliente, ano

supongamos:
cod_cliente, ano
1234 2008
5555 2008
1234 2009

Quisiera como resultado:
1234,2008,'Existe'
5555,2008,'No Existe'

Donde el tercer campo es el resultado de determinar si existe dhico
cod_cliente en el año 2009

Momentanamente lo hice con Exists y No exists y aplique UNION pero
quisera saber como poder hacerlo sin unir ambas consultas.

Select distinct cod_cliente,ano,'EXISTE en 2009'
From CLIENTES H
Where ano 08
and exists
(
Select * From clientes HH
Where ano 09
and h.cod_cliente=hh.cod_cliente
)
UNION
Select distinct cod_cliente,ano,'NO existe en 2009'
From CLIENTES H
Where ano 08
and not exists
(
Select * From clientes HH
Where ano 09
and h.cod_cliente=hh.cod_cliente
)


Atte.
PENTA.

Preguntas similare

Leer las respuestas

#1 Penta
07/05/2009 - 01:51 | Informe spam
OPS !!!!!
Solucionado con LEFT JOIN, como tan bruto.

PENTA.
Respuesta Responder a este mensaje
#2 Alejandro Mesa
07/05/2009 - 02:13 | Informe spam
Penta,

Trata usando un outer join ó la función CASE.

select distinct
a.cod_cliente,
a.anio,
case when b.anio is null then 'no existe' else 'existe' end as c3
from
clientes as a
left join
clientes as b
on a.cod_cliente = b.cod_cliente
and a.anio = 2008 and b.anio = 2009
where
a.anio = 2008;
go

select distinct
cod_cliente,
anio,
case when exists(select * from clientes as b where b.cod_cliente =
a.cod_cliente and b.anio = 2009) then 'Existe' else 'No Existe' end as c3
from
clientes a
where
anio = 2008;
go


AMB


"Penta" wrote:

Estimados.
Utilizo SS2000 SP4

Tengo una tabla llamada clientes que contiene:

cod_cliente, ano

supongamos:
cod_cliente, ano
1234 2008
5555 2008
1234 2009

Quisiera como resultado:
1234,2008,'Existe'
5555,2008,'No Existe'

Donde el tercer campo es el resultado de determinar si existe dhico
cod_cliente en el año 2009

Momentanamente lo hice con Exists y No exists y aplique UNION pero
quisera saber como poder hacerlo sin unir ambas consultas.

Select distinct cod_cliente,ano,'EXISTE en 2009'
From CLIENTES H
Where ano 08
and exists
(
Select * From clientes HH
Where ano 09
and h.cod_cliente=hh.cod_cliente
)
UNION
Select distinct cod_cliente,ano,'NO existe en 2009'
From CLIENTES H
Where ano 08
and not exists
(
Select * From clientes HH
Where ano 09
and h.cod_cliente=hh.cod_cliente
)


Atte.
PENTA.






Respuesta Responder a este mensaje
#3 Penta
07/05/2009 - 03:41 | Informe spam
On 6 mayo, 20:13, Alejandro Mesa
wrote:
Penta,

Trata usando un outer join ó la función CASE.

select distinct
    a.cod_cliente,
    a.anio,
    case when b.anio is null then 'no existe' else 'existe' end as c3
from
    clientes as a
    left join
    clientes as b
    on a.cod_cliente = b.cod_cliente
    and a.anio = 2008 and b.anio = 2009
where
    a.anio = 2008;
go

select distinct
    cod_cliente,
    anio,
    case when exists(select * from clientes as b where b.cod_cliente > a.cod_cliente and b.anio = 2009) then 'Existe' else 'No Existe' end as c3
from
    clientes a
where
    anio = 2008;
go

AMB


Estimado Alejandro.
Gracias por tu respuesta, me gusta mas la solucion con left join, una
sola duda:
En el Left indicas que a.ano 08 , esto seria repetitivo no ? ya que
esta en el Where tambien esta como ano 08

Atento a tus comentarios.
PENTA.
Respuesta Responder a este mensaje
#4 Alejandro Mesa
07/05/2009 - 14:45 | Informe spam
Penta,

Con ponerla en la clausula "where" tienes. Poner la en ambos lados no hace
danio, es mas, a veces ayudamos al optimizador de queries con esas supuestas
redundancias.

from
clientes as a
left join
clientes as b
on a.cod_cliente = b.cod_cliente
and b.anio = 2009
where
a.anio = 2008;

AMB


"Penta" wrote:

On 6 mayo, 20:13, Alejandro Mesa
wrote:
> Penta,
>
> Trata usando un outer join ó la función CASE.
>
> select distinct
> a.cod_cliente,
> a.anio,
> case when b.anio is null then 'no existe' else 'existe' end as c3
> from
> clientes as a
> left join
> clientes as b
> on a.cod_cliente = b.cod_cliente
> and a.anio = 2008 and b.anio = 2009
> where
> a.anio = 2008;
> go
>
> select distinct
> cod_cliente,
> anio,
> case when exists(select * from clientes as b where b.cod_cliente > > a.cod_cliente and b.anio = 2009) then 'Existe' else 'No Existe' end as c3
> from
> clientes a
> where
> anio = 2008;
> go
>
> AMB
Estimado Alejandro.
Gracias por tu respuesta, me gusta mas la solucion con left join, una
sola duda:
En el Left indicas que a.ano 08 , esto seria repetitivo no ? ya que
esta en el Where tambien esta como ano 08

Atento a tus comentarios.
PENTA.


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida