Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

[SOLUCIONADO] IF dentro de select o where SQL

Estas en el tema de IF dentro de select o where SQL en el foro de Bases de Datos General en Foros del Web. Buen día, acudo a su ayuda para ver si solucionamos un problema con mi consulta, estoy usando EMS Interbase/ Firebird manager Dialecto SQL 3, gracias ...
  #1 (permalink)  
Antiguo 24/01/2017, 08:53
 
Fecha de Ingreso: julio-2013
Ubicación: Colombia
Mensajes: 11
Antigüedad: 10 años, 9 meses
Puntos: 0
De acuerdo IF dentro de select o where SQL

Buen día, acudo a su ayuda para ver si solucionamos un problema con mi consulta, estoy usando EMS Interbase/ Firebird manager Dialecto SQL 3, gracias de antemano.

Finalidad de la consulta: traer registros con código, nombres y precios de actividades, luego que al precio de las actividades se les quite un porcentaje y se pueda imprimir en otra columna, pero que a la vez el descuento se haga a tipos de registro especificados es decir, ej: para los productos que sean manzanas o mangos se quita el 50% a su precio y para el resto de productos se quita el 20%.

Tengo la siguiente consulta, que hasta el momento me quita sea el 20% o el 50 % pero a todos los productos, seria esta:

Código:
SELECT tabla1.nombrecampo, tabla2.nombrecampo, tabla3.preciofruta-(tabla3.preciofruta*0.5) AS columnadto, tabla4.nombrecampo
FROM tabla1, tabla2, tabla3, tabla4...relaciones Inner Join
WHERE condiciones para filtrar otros datos
Como dije la consulta funciona bien hasta ahí pero no se donde poner una condición o de que manera se puede modificar la consulta para que haga lo mencionado, investigue un poco y encontré la opción CASE pero no funciona en mi BD, trate de hacer un IF pero al parecer no se puede dentro del SELECT ni abajo en el WHERE aunque la verdad no se si este bien implementado, fue lo siguiente:

Código:
SELECT  tabla1.nombrecampo, tabla2.nombrecampo,
 IF(tabla3.nombrefruta = 'MANZANAS' OR tabla3.nombrefruta = 'MANGOS') THEN
   BEGIN
   tabla3.preciofruta-(tabla3.preciofruta*0.5) AS columnadto
   END
 ELSE
 BEGIN
  tabla3.preciofruta-(tabla3.preciofruta*0.2) AS columnadto
 END
FROM tabla1, tabla2, tabla3, tabla4...relaciones Inner Join
WHERE condiciones para filtrar otros datos
Espero haber sido claro y reitero agradecimientos por la atención y ayuda dispensada.
  #2 (permalink)  
Antiguo 25/01/2017, 10:10
Avatar de Ito79  
Fecha de Ingreso: diciembre-2013
Mensajes: 71
Antigüedad: 10 años, 4 meses
Puntos: 18
Respuesta: IF dentro de select o where SQL

Hola,
De antemano, nunca he trabajado con FirebirdSQL, por lo que lo que digo podría no valer.

Pero he consultado la documentación y parece que sí que está disponible el CASE, ¿has probado a hacer algo sencillo como lo que viene en los ejemplos?

https://firebirdsql.org/refdocs/langrefupd15-case.html

Un saludo

// Ito
  #3 (permalink)  
Antiguo 26/01/2017, 07:40
 
Fecha de Ingreso: julio-2013
Ubicación: Colombia
Mensajes: 11
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: IF dentro de select o where SQL

Hola amigo, gracias por la ayuda, hice un ejercicio con case como este:

Código:
select Nombre1_per,
       Nombre2_Per,
       CASE Sexo_persona
         when 'M' then 'Masculino'
         when 'F' then 'Femenino'
         else 'No encontrado'
       end
from Informacion_persona
Al parecer si funciona y hace el proceso, trate de implementarlo dentro del select algo como esto:

Código:
SELECT  tabla1.nombrecampo, tabla2.nombrecampo,
 CASE tabla3
   WHEN tabla3.nombrefruta = 'MANZANAS' THEN tabla3.preciofruta-          (tabla3.preciofruta*0.5) AS columnadto
     ELSE
       tabla3.preciofruta-(tabla3.preciofruta*0.2) AS columnadto
   END
FROM tabla1, tabla2, tabla3, tabla4...relaciones Inner Join
WHERE condiciones para filtrar otros datos
Aunque lo mas probable es que lo este implementado mal el resultado dice:

fmSQLEditor.Query:
Invalid token.Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 6, column 30.
=.

Según entiendo no reconoce el signo igual, gracias.
  #4 (permalink)  
Antiguo 26/01/2017, 08:34
 
Fecha de Ingreso: julio-2013
Ubicación: Colombia
Mensajes: 11
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: IF dentro de select o where SQL

Bueno amigos lo dicho estaba mal implementado el CASE, describo lo que estaba mal:

Código:
SELECT  tabla1.nombrecampo, tabla2.nombrecampo,
 CASE tabla3-> aqui no va la tabla sino el nombre del campo cuya tabla ya esta referenciada en el FROM
   WHEN tabla3.nombrefruta = 'MANZANAS' -> luego del WHEN va solo la descripcion del campo al cual se le quiere hacer un cálculo o algo por el estilo THEN tabla3.preciofruta-(tabla3.preciofruta*0.5) AS columnadto-> estaba renombrando columna y no es necesario como tampoco funicionaria.
     ELSE
       tabla3.preciofruta-(tabla3.preciofruta*0.2) AS columnadto
   END
FROM tabla1, tabla2, tabla3, tabla4...relaciones Inner Join
WHERE condiciones para filtrar otros datos
Quedaría así:

Código:
SELECT  tabla1.nombrecampo, tabla2.nombrecampo,
 CASE nombrefruta
   WHEN 'MANZANAS' THEN tabla3.preciofruta-(tabla3.preciofruta*0.5)
     ELSE
       tabla3.preciofruta-(tabla3.preciofruta*0.2)
   END
FROM tabla1, tabla2, tabla3, tabla4...relaciones Inner Join
WHERE condiciones para filtrar otros datos
Y listo!!, ahora me toca ver como implementarlo a nivel de reporte, no solo es para mi si no para los trabajadores, gracias a todos un saludo.

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:43.