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.
#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:

Mostrar la cita
#3 Penta
07/05/2009 - 03:41 | Informe spam
On 6 mayo, 20:13, Alejandro Mesa
wrote:
Mostrar la cita
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.
#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:

Mostrar la cita
Ads by Google
Search Busqueda sugerida