SQL - Una linea de un case devuelve dos columnas cuando solo deberia devolver una

 
Vista:

Una linea de un case devuelve dos columnas cuando solo deberia devolver una

Publicado por Diego (2 intervenciones) el 20/04/2011 10:26:59
Hola a todos, vereis tengo una consulta en la que hago un case, si un select devuelve alguna linea (exists) entonces devuelve un valor, y si no devuelve un valor que es una operación, el sql es este:

select
case
when (exists (select * from .... WHERE ....)
then VLBRTTOTOPE
else
VLBRTTOTOPE * (1 - VLPCTRISBON/100)
end SUMA
from
TABLA
where
//clausulas del where;

el caso es que la linea del else VLBRTTOTOPE * (1 - VLPCTRISBON/100) debería devolver el valor de realizar esa operacion, pero devuelve dos rows, el de VLBRTTOTOPE sin hacer la operación y el de la operación.

Alguna idea? es para el curro y no conseguimos ver porque ocurre esto!

Muchas gracias!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Una linea de un case devuelve dos columnas cuando solo deberia devolver una

Publicado por jaume (2 intervenciones) el 25/04/2011 11:01:25
La razón de que te devuelva 2 filas no está en la SELECT, sino el el FROM/WHERE, pon la consulta entera para que podamos ver que te está pasando.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Una linea de un case devuelve dos columnas cuando solo deberia devolver una

Publicado por Diego (2 intervenciones) el 26/04/2011 09:49:31
Hola! la consulta es la siguiente:

select unique
case when (exists (select * from TABLA1 where PARAM1 = '04882' and to_date('01/03/2010', 'dd/MM/RR') <= PARAM2 and
PARAM2 <= to_date('30/03/2010', 'dd/MM/RR') and PARAM3 = '4')) then PARAM4
else (PARAM4 * (1 - PARAM5/100)) end SUMA
from
TABLA1
where
PARAM1 = '04882' and
PARAM6 = '1' and
to_date('01/03/2010', 'dd/MM/RR') <= PARAM2 and
PARAM2 <= to_date('30/03/2010', 'dd/MM/RR')
union all
select 0 from dual;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Una linea de un case devuelve dos columnas cuando solo deberia devolver una

Publicado por Jaume (2 intervenciones) el 26/04/2011 10:18:02
from
TABLA1
where
PARAM1 = '04882' and
PARAM6 = '1' and
to_date('01/03/2010', 'dd/MM/RR') <= PARAM2 and
PARAM2 <= to_date('30/03/2010', 'dd/MM/RR')

Pues entonces debe ser que la condición del WHERE te devuelve dos filas, es decir hay dos registros que cumplen la condición:

PARAM1 = '04882' and
PARAM6 = '1' and
to_date('01/03/2010', 'dd/MM/RR') <= PARAM2 and
PARAM2 <= to_date('30/03/2010', 'dd/MM/RR')

De hecho, puedes hacer la siguiente prueba para verificarlo

SELECT 1
from
TABLA1
where
PARAM1 = '04882' and
PARAM6 = '1' and
to_date('01/03/2010', 'dd/MM/RR') <= PARAM2 and
PARAM2 <= to_date('30/03/2010', 'dd/MM/RR')

¿Te sigue devolviendo dos filas , verdad? , entonces ahi tienes la prueba
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar