Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-04-2008
[David] David is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Málaga
Posts: 417
Poder: 21
David Va por buen camino
Cool Se puede hacer consultas SQL condicionales con Firebird

Hola

tengo dos consultas, para averiguar un sólo valor, y es que dependiendo de unas condiciones, pues necesito un valor u otro. Pongo un ejemplo, con datos inventados.

Código SQL [-]
//primera query

SELECT EMPLEADO,SUM(TOTAL) AS IMPORTE
FROM FACTURAS
WHERE ((EMPLEADOIMPORTANTE IS NULL) OR (EMPLEADO = EMPLEADOIMPORTANTE))
GROUP BY EMPLEADO

//Segunda query
SELECT EMPLEADO,SUM(TOTAL * PORCENTAJE) AS IMPORTE
FROM FACTURAS
WHERE ((EMPLEADOIMPORTANTE IS NOT NULL) AND (EMPLEADO <> EMPLEADOIMPORTANTE))
GROUP BY EMPLEADO

Como veis necesito 2 querys para averiguar la cantidad importe, en este caso tengo dos Querys, calculo por separado el valor de importe y los sumo, pero se podría hacer esta consulta en una sola con algún tipo de condicional ?

Un saludo
Responder Con Cita
  #2  
Antiguo 04-04-2008
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Creo que condiciones como IF ... THEN no hay, pero puedes resolverlo de otras maneras:

Si utilizas el UNION te devolverá los dos resultados unidos, como si fuera una sola consulta.
Código SQL [-]
SELECT EMPLEADO,SUM(TOTAL) AS IMPORTE
FROM FACTURAS
WHERE ((EMPLEADOIMPORTANTE IS NULL) OR (EMPLEADO = EMPLEADOIMPORTANTE))
GROUP BY EMPLEADO

UNION

SELECT EMPLEADO,SUM(TOTAL * PORCENTAJE) AS IMPORTE
FROM FACTURAS
WHERE ((EMPLEADOIMPORTANTE IS NOT NULL) AND (EMPLEADO <> EMPLEADOIMPORTANTE))
GROUP BY EMPLEADO

También puedes enviarle un parámetro para que ejecute una sola de las dos...

Código SQL [-]
SELECT EMPLEADO,SUM(TOTAL) AS IMPORTE
FROM FACTURAS
WHERE ((EMPLEADOIMPORTANTE IS NULL) OR (EMPLEADO = EMPLEADOIMPORTANTE)) AND (:EJECUTA=1)
GROUP BY EMPLEADO

UNION

SELECT EMPLEADO,SUM(TOTAL * PORCENTAJE) AS IMPORTE
FROM FACTURAS
WHERE ((EMPLEADOIMPORTANTE IS NOT NULL) AND (EMPLEADO <> EMPLEADOIMPORTANTE)) AND (:EJECUTA=2)
GROUP BY EMPLEADO
Responder Con Cita
  #3  
Antiguo 04-04-2008
Avatar de Ivanzinho
[Ivanzinho] Ivanzinho is offline
Miembro Premium
 
Registrado: ene 2005
Ubicación: Galicia
Posts: 595
Poder: 20
Ivanzinho Va por buen camino
Hola David puedes hacerlo utilizando la sentencia Case When, la cosa quedaría de la siguiente manera.
Código SQL [-]
Select empleado, case when (empleadoimportante is null or empleado = empleadoimportante) then
                   sum(total)
                 else when (empleadoimportante is not null and empleado <> empleado importante) then
                   sum(total * porcentaje)
                 else
                   lo que corresponda
                 end as importe
 group by empleado

Espero que te sirva

Un saúdo.
__________________
Si no lees esto no vivirás tranquilo
Non lle poñades chatas â obra namentras non se remata. O que pense que vai mal que traballe n’ela; hai sitio para todos. (Castelao)
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
se puede hacer diagramas en firebird? ozegarra Firebird e Interbase 1 13-11-2007 23:08:30
condicionales en SQL Max_E. SQL 2 31-10-2006 19:28:33
Necesito un favor..Quien puede hacer una funcion para Base Firebird pani_alex Firebird e Interbase 8 12-04-2006 14:26:25
SQL´s con condicionales AMINOA2R Firebird e Interbase 3 02-02-2006 09:33:14
Hacer mascaras en consultas sql. el_barto SQL 19 21-01-2006 00:11:51


La franja horaria es GMT +2. Ahora son las 11:29: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
Copyright 1996-2007 Club Delphi