Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Problemas con el IF (https://www.clubdelphi.com/foros/showthread.php?t=81178)

jooooseph 18-10-2012 22:15:40

Problemas con el IF
 
tengo este problema, no se donde ocurre, pero me arroja que es del IF
Código SQL [-]
select   CLIENTES.NOMBRE_COMPLETO, 
sum(if(extract(year from fecha_ingreso) = 2012 and extract(month from fecha_ingreso) = 1, monto_soles, 0)) as enero
from CLIENTES
left join INGRESOS on MIEMBROS.CODIGO_MIEMBRO = diezmos.CODIGO_MIEMBRO
group by nombre_completo

EL ERROR ES EL SIGUIENTE

Código SQL [-]
Can't format message 13:896 -- message file C:\Program Files (x86)\EMS\SQL Studio for InterBase & Firebird\firebird.msg not found.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 2, column 5.
If.

Espero puedan ayudarme...

Ferrari 19-10-2012 17:40:27

Duda
 
Donde haces referencia a la tabla 'fecha_ingreso' ???...:confused:

jooooseph 19-10-2012 17:54:03

el mismo problema
 
Cita:

Empezado por Ferrari (Mensaje 447457)
Donde haces referencia a la tabla 'fecha_ingreso' ???...:confused:

Código SQL [-]
select   
CLIENTES.NOMBRE_COMPLETO,  
sum(if(extract(year from ingresos.fecha_ingreso) = 2012 and extract(month from ingresos.fecha_ingreso) = 1, monto_soles, 0)) as enero 
from CLIENTES 
left join INGRESOS on MIEMBROS.CODIGO_MIEMBRO = INGRESOS.CODIGO_MIEMBRO 
group by nombre_completo

Este seria el codigo, pero el error es el mismo.

Casimiro Notevi 19-10-2012 18:18:19

¿MySql?..........

jooooseph 19-10-2012 18:19:10

Cita:

Empezado por Casimiro Notevi (Mensaje 447462)
¿MySql?..........



es firebird.

Este tipo de codigo me funcionó en otro proyecto, pero no se que pasa ahora, lo peor es que ya no tengo el codigo anterior porq se me malogro el disco duro. espero puedas ayudarme

Casimiro Notevi 19-10-2012 18:37:27

Me parece recordar que con el if no puedes dar un valor u otro, eso es con el coalesce.

jooooseph 19-10-2012 18:50:51

Como lo mencioné anteriormente.. Esta función me funcionó en otro proyecto, pero ahora no se que pasa. de todas maneras gracias por la ayuda.

Casimiro Notevi 19-10-2012 18:59:32

No te ha podido funcionar, con esa sintaxis no puede ser.
Habrás hecho algo así como: if (comparativa año y mes) then variable=campoquequieras else '0'

jooooseph 19-10-2012 19:16:42

Código SQL [-]
select
  clientes.nombre,
  sum(if(extract(year from fecha) = 2012 and extract(month from fecha) = 1, monto, 0)) as enero,
  sum(if(extract(year from fecha) = 2012 and extract(month from fecha) = 2, monto, 0)) as febrero,
  ...
  sum(if(extract(year from fecha) = 2012 and extract(month from fecha) = 12, monto, 0)) as diciembre
from clientes
left join ingresos on clientes.nombre = ingresos.nombre
group by nombre

Ese era el codigo iniacial que use en otro poryecto de prueba y funcionaba perfectamente para mi reporte anual con firebird. con una BD de prueba.
Ahora he querido volverlo a usar pero me sale error en el IF.^\||/

hoyosfelix 19-10-2012 19:40:44

Buena tarde a todos,

En la consulta se utiliza iif, y en los procedimientos se utiliza el if con una sola i.
El motor siempre indica el error de sintaxis, como se te indica en tu código de error: Token unknown - line 2, column 5.
de allí te da una pista de dónde está el error.
Probá cambiando el if por el iif en tu consulta y luego avisá el resultado.

Código SQL [-]
select   clientes.nombre,   sum(iif(extract(year from fecha) = 2012 and extract(month from fecha) = 1, monto, 0)) as enero,
sum(iif(extract(year from fecha) = 2012 and extract(month from fecha) = 2, monto, 0)) as febrero,
Una sugerencia a los compañeros foristas, una vez que se resuelvan las preguntas si se puede poner en el título la palabra RESUELTO o algo similar para cerrar las preguntas.

Saludos...

Casimiro Notevi 19-10-2012 20:33:30

Cita:

Empezado por hoyosfelix (Mensaje 447473)
Una sugerencia a los compañeros foristas, una vez que se resuelvan las preguntas si se puede poner en el título la palabra RESUELTO o algo similar para cerrar las preguntas.

Es un tema que lo hemos comentado algunas veces, no lo hacemos por varios motivos, uno de ellos es que aunque esté resuelto, siempre puede existir alguna nueva respuesta usando otra forma o método de resolverlo, por lo que se "enriquece" el contenido con varias posibilidades distintas.

Por lo que nunca cerramos los hilos.


La franja horaria es GMT +2. Ahora son las 03:24:23.

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