CASE WHEN + subconsulta

20/09/2007 - 17:30 por Matias | Informe spam
Hola a todos, antes que nada pido perdon por la mala explicación(soy muy
malo para esto)
Necesito mostrar en un campo del select una leyenda dependiendo de el valor
que me devuelva una subconsulta.
Supongamos que éste es el select(no pongo el original para no hacelo
complicado):

Select campo1, campo2, MiCampo = CASE WHEN campo1+campo2 IN (SELECT
TB.campo1+TB.campo2 FROM TABLA_B TB WHERE bla bla)
THEN 'LEYENDA_1' ELSE 'LEYENDA_2' END
FROM TABLA_A

seria si los valores de campo1 + campo2 de la tabla TABLA_A están en campo1
+ campo2 de la TABLA_B muestro una leyenda, si no, muestro otra.

El problema que tengo con el select q puse es que si encuentra una
conicidencia me pone LEYENDA_1 a todos los registos.

Pongo las tablas para q se entienda mejor:

TABLA_A
campo1 campo2
1 A
1 B
1 C

TABLA_B
ID descripcion campo1 campo2
10 pepe
11 juan 1 A
12 roque 1 C
13 ana

El resultado deberia ser
campo1 campo2 MiCampo
LEYENDA_2
1 A LEYENDA_1
1 C LEYENDA_1
LEYENDA_2

Gracias por su tiempo.

PD: es SQL 2K
 

Leer las respuestas

#1 Alejandro Mesa
20/09/2007 - 19:10 | Informe spam
Hola Matias,

Te recomiendo que uses el operador EXISTS y que el subquery sea
correlacionado.

select
a.campo1,
a.campo2,
case
when exists (
select *
from dbo.t2 as b
where b.campo1 = a.campo1 and b.campo2 = a.campo2
) then 'leyenda_1'
else 'leyenda_2'
end as lyenda
from
dbo.t1 as a


AMB

"Matias" wrote:

Hola a todos, antes que nada pido perdon por la mala explicación(soy muy
malo para esto)
Necesito mostrar en un campo del select una leyenda dependiendo de el valor
que me devuelva una subconsulta.
Supongamos que éste es el select(no pongo el original para no hacelo
complicado):

Select campo1, campo2, MiCampo = CASE WHEN campo1+campo2 IN (SELECT
TB.campo1+TB.campo2 FROM TABLA_B TB WHERE bla bla)
THEN 'LEYENDA_1' ELSE 'LEYENDA_2' END
FROM TABLA_A

seria si los valores de campo1 + campo2 de la tabla TABLA_A están en campo1
+ campo2 de la TABLA_B muestro una leyenda, si no, muestro otra.

El problema que tengo con el select q puse es que si encuentra una
conicidencia me pone LEYENDA_1 a todos los registos.

Pongo las tablas para q se entienda mejor:

TABLA_A
campo1 campo2
1 A
1 B
1 C

TABLA_B
ID descripcion campo1 campo2
10 pepe
11 juan 1 A
12 roque 1 C
13 ana

El resultado deberia ser
campo1 campo2 MiCampo
LEYENDA_2
1 A LEYENDA_1
1 C LEYENDA_1
LEYENDA_2

Gracias por su tiempo.

PD: es SQL 2K



Preguntas similares