Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MS SQL Server (https://www.clubdelphi.com/foros/forumdisplay.php?f=23)
-   -   Sentencia CASE en SQL Server (https://www.clubdelphi.com/foros/showthread.php?t=66098)

juanelo 02-02-2010 01:07:49

Sentencia CASE en SQL Server
 
Que tal a todos,
Pues sigo con mi peregrinar para migrar una aplicacion a SQL Server, y me topo ahora que la sentencia CASE de SQL Server (y creo que la de Firebird tambien) no soportan expresiones boleanas.
En firebird tengo la siguiente sentencia:
Código SQL [-]
SELECT IIF (TABLA.TIPO_MOV >= 51, -1, 1) AS CANT_OP FROM TABLA
Y lo mas logico es traducirlo en Sql Server asi:
Código SQL [-]
Select CASE TABLA.TIPO_MOV WHEN >=51 THEN -1 ELSE 1 END AS CANT_OP FROM TABLA
Pues que creen? que no es posible, ahora como le puedo hacer para que esta sentencia pueda evaluar el ">=51" ?
Cualquier ayuda o direccion es bien recibida, y como siempre, les doy las gracias por tomarse el tiempo de leer este post.
Saludos.

fjcg02 02-02-2010 11:27:28

Prueba con

Código SQL [-]
Select CASE WHEN TABLA.TIPO_MOV >=51 THEN -1 ELSE 1 END AS CANT_OP FROM TABLA

Saludos

juanelo 02-02-2010 15:57:09

Muchas gracias fjcg02 por tu respuesta, pero creeme que la probe asi y tampoco, en resumidas cuentas no soporta expresiones boleanas
¿Alguien sabe como poder darle la vuelta a esto?
Gracias

ContraVeneno 02-02-2010 16:11:52

pues lo que puso fjcg02 a mi me funciona perfectamente...

¿por qué dices que no te funciona a tí?

juanelo 02-02-2010 16:23:42

Cita:

Empezado por ContraVeneno (Mensaje 352640)
pues lo que puso fjcg02 a mi me funciona perfectamente...

¿por qué dices que no te funciona a tí?

ContraVeneno,
No se si sea por la version de SQL que uso, la cual es SQL 2005 Express Edition pero me marca el siguiente error:
Código SQL [-]
Msg 102, Level 15, State 1, Line 1
Incorrect syntax near '>'.
Gracias.

sinalocarlos 03-02-2010 00:41:32

la sentencia de fjcg02 funciona correctamente, podrias darnos un ejemplo de como tienes tu consulta ya con esta modificacion?

juanelo 03-02-2010 00:59:59

Cita:

Empezado por sinalocarlos (Mensaje 352692)
la sentencia de fjcg02 funciona correctamente, podrias darnos un ejemplo de como tienes tu consulta ya con esta modificacion?

Que tal sinalocarlos, exactamente igual:
Código SQL [-]
Select CASE WHEN TABLA.TIPO_MOV >=51 THEN -1 ELSE 1 END AS CANT_OP FROM TABLA
Y manda el mesaje que ya puse:
"Msg 102, Level 15, State 1, Line 1
Incorrect syntax near '>'."


PD: La sentencia como la mando fcjg02 ya la habia probado, y como menciono desde el pricipio me da error con cualquier expresion boleana.

Gracias por su respuesta.

ContraVeneno 03-02-2010 01:09:36

yo lo probe en SQL server 2000 y 2008 (enterprise) y si funciona :confused::confused::confused:

¿será alguna práctica acostumbrada de microsoft de que sus cosas "gratis" están limitadas? :confused:

sinalocarlos 03-02-2010 01:14:06

mas raro, ya lo prove en SQL 2000 dev edition, sql 2005 standar edition y en 2005 express y en todos me funciona, aqui la imagen en 2005 express:



Alguien se trajo una ouija?

juanelo 03-02-2010 01:14:38

Cita:

Empezado por ContraVeneno (Mensaje 352697)
yo lo probe en SQL server 2000 y 2008 (enterprise) y si funciona :confused::confused::confused:

¿será alguna práctica acostumbrada de microsoft de que sus cosas "gratis" están limitadas? :confused:

Que tal Contraveneno,
Pues ahi te va lo peor, ya lo probe en SQL server 2005 (no la gratuita) de la empresa en cuestion y nada, la cosa sigue igual, en mi caso yo uso la express edition para desarrollo unicamente.
Como dicen por ahi, MS es como las mujeres, no hay que tratar de entenderlo sino hay que aprender a vivir con el. :o

fjcg02 03-02-2010 14:35:35

Hola,
pon la definición de la tabla, por favor.

Saludos

juanelo 03-02-2010 16:01:24

Cita:

Empezado por fjcg02 (Mensaje 352745)
Hola,
pon la definición de la tabla, por favor.

Saludos

La que tu quieras, de hecho he hecho una base de datos de prueba y lo mismo.

PD: Estoy confirmando una sospecha que tengo y en caso de ser cierta les informo.

Gracias

juanelo 03-02-2010 17:20:43

Ya esta!, pues resulta que son los driver dbexpress para firebird y SQL (tambien para FB pasaba!) que adquiri hace una año y que son los que uso en mis aplicaciones. Los actualice y listo!.
Yo siempre dije que MS no es "tan malo" :rolleyes:
Muchas gracias a todos en verdad.

Gatsoft 26-02-2010 14:19:47

Brillante , Brillante , Brillante. ! perfecto SINALOCARLOS !.
No sabes como me ayudaste con este ejemplo.
estuve mas de 2 días buscando en Internet esta solución
hasta que di con ella Gracias a ti.
a mi tampoco me daba ya que lo hacia de la siguiente Forma:

CASE mov>1 WHEN -1 THEN .... ELSE .........
y esa es la forma que se usa solo para IGUALDADES es decir
CASE mov WHEN THEN .....

Pero cuando se hacen comparaciones es de la forma por ti explicada
(las 2 instrucciones juntas)
CASE WHEN mov>1 THEN ..... ELSE .........

Así que muchas gracias nuevamente, pues no daba con la segunda forma.


La franja horaria es GMT +2. Ahora son las 18:34:31.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi