Ayuda en consulta con CASE

08/10/2003 - 16:07 por Sergio | Informe spam
que tal , es la primera vez que mando un post en este foro, y me gustaria
saber que estoy haciendo mal en la siguiente consulta.

La tabla tiene un valor en el campo tel_tarifa_minuto, pero lo que yo quiero
es modificar el valor, de acuerdo a los parametros del case
si me devuelve los resultados, pero en la columna Total me devuelve la
operacion con el valor del campo antes de haberselo asignado en el case.

Me explico un poco mas, en la tabla tengo originalmente:

tel_pais tel_area_code tel_duracion tel_tarifa_minuto
01 01 2
1.5

en la consulta resultante devuelve

tel_pais tel_area_code tel_duracion tel_tarifa_minuto
Total
01 01 2
2.8 3.0

Cuando según yo deberia devolver en Total 5.60.

SELECT hottel.tel_fecha, hotext.depto, hottel.tel_pais,
hottel.tel_area_code,
hottel.tel_telefono, hottel.tel_hora_inicio, hottel.tel_duracion,
tel_tarifa_minuto case
when hottel.tel_pais='01' and hottel.tel_area_code='01 ' then 2.8
when hottel.tel_pais='01' and hottel.tel_area_code='00 ' then 2.0
when hottel.tel_pais='01' and hottel.tel_area_code='044 ' then 6.0
else 3.0
END,
( tel_tarifa_minuto * hottel.tel_duracion) as Total,
hottel.tel_num_ext,hottel.tel_observaciones as Descripcion
FROM hottel,hotext
where rtrim(ltrim(hottel.tel_num_ext))=rtrim(ltrim(hotext.num_ext)) and
hottel.tel_fecha>='20030101' and hottel.tel_fecha<='20030115' and
hotext.depto='CXC'


Gracias por su ayuda

Sergio.
 

Leer las respuestas

#1 Javier Loria
08/10/2003 - 16:50 | Informe spam
Hola Sergio:
Me da la impresion que las columnas tel_pais o tel_area_code tienes mas
o menos espacios de los que estas poniendo en el CASE.
Podrias usar un RTRIM para cortar los espacios el CASE como hiciste en el
WHERE:
...
CASE
WHEN RTRIM(hottel.tel_pais)='01' and RTRIM(hottel.tel_area_code)='01'
then 2.8
WHEN RTRIM(hottel.tel_pais)='01' and RTRIM(hottel.tel_area_code)='00'
then 2.0
WHEN RTRIM(hottel.tel_pais)='01' and RTRIM(hottel.tel_area_code)='044'
then 6.0
ELSE3.0
END,

Por otra parte, y sin conocer tu aplicacion, si este es codigo temporal me
parece bien, pero si es codigo que vas a dejar en produccion porque no creas
una Tabla con los costos y haces un JOIN, para dejar el codigo mas facil de
mantener?

Saludos,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.


Sergio escribio:
que tal , es la primera vez que mando un post en este foro, y me
gustaria saber que estoy haciendo mal en la siguiente consulta.

La tabla tiene un valor en el campo tel_tarifa_minuto, pero lo que yo
quiero es modificar el valor, de acuerdo a los parametros del case
si me devuelve los resultados, pero en la columna Total me devuelve la
operacion con el valor del campo antes de haberselo asignado en el
case.

Me explico un poco mas, en la tabla tengo originalmente:

tel_pais tel_area_code tel_duracion
tel_tarifa_minuto 01 01 2
1.5

en la consulta resultante devuelve

tel_pais tel_area_code tel_duracion tel_tarifa_minuto
Total
01 01 2
2.8 3.0

Cuando según yo deberia devolver en Total 5.60.

SELECT hottel.tel_fecha, hotext.depto, hottel.tel_pais,
hottel.tel_area_code,
hottel.tel_telefono, hottel.tel_hora_inicio, hottel.tel_duracion,
tel_tarifa_minuto > case
when hottel.tel_pais='01' and hottel.tel_area_code='01 ' then 2.8
when hottel.tel_pais='01' and hottel.tel_area_code='00 ' then 2.0
when hottel.tel_pais='01' and hottel.tel_area_code='044 ' then 6.0
else 3.0
END,
( tel_tarifa_minuto * hottel.tel_duracion) as Total,
hottel.tel_num_ext,hottel.tel_observaciones as Descripcion
FROM hottel,hotext
where rtrim(ltrim(hottel.tel_num_ext))=rtrim(ltrim(hotext.num_ext))
and hottel.tel_fecha>='20030101' and hottel.tel_fecha<='20030115' and
hotext.depto='CXC'


Gracias por su ayuda

Sergio.

Preguntas similares