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

Preguntas similare

Leer las respuestas

#6 jcac
21/09/2007 - 17:07 | Informe spam
Que bueno a medias, cualquier cosa avisas.

Saludos


"Matias" escribió en el mensaje
news:e4uQng8%
GRACIAS, funciono perfecto! pero no me funciona cuando lo pongo en el
select real, que es complicado ya que esta dentro de una subconsulta
correlacionada, está hecho así para poder filtrar luego segun la leyenda.
Pero bueno voy a seguir intentando a ver como lo meto dentro de el "gran"
select .

gracias nuevamente!!!!

"jcac" escribió en el mensaje
news:%23XqSa%237%
No se si esto te sirva pero te puede dar una idea:

create table #tablaa(campo1 int, campo2 varchar(10))
create table #tablab(id int, descripcion varchar(10), campo1 int, campo2
varchar(10))
go
insert into #tablaa values (1, 'A')
insert into #tablaa values (1, 'B')
insert into #tablaa values (1, 'C')
go
insert into #tablab values (10, 'pepe', null, null)
insert into #tablab values (11, 'juan', 1, 'A')
insert into #tablab values (12, 'roque', 1, 'C')
insert into #tablab values (13, 'ana', null, null)
go

select a.campo1, a.campo2, case when a.campo1 is null and a.campo2 is
null then 'LEYENDA2' else 'LEYENDA1' end as MiCampo from #tablaa a right
join #tablab b on a.campo1 = b.campo1 and a.campo2 = b.campo2
go
drop table #tablaa
drop table #tablab
go

Saludos

"Matias" escribió en el mensaje
news:OjGUws5%
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









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