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

Consulta condicional

Estas en el tema de Consulta condicional en el foro de Bases de Datos General en Foros del Web. Hola, tengo la siguiente consulta: SELECT FACTURACION.Codigo, FACTURACION.Referencia, referencias.PROYECTO, FACTURACION.Fecha, ROUND( (((FACTURACION.Importe_1+FACTURACION.Importe_2+FAC TURACION.Importe_3+FACTURACION.Importe_4+FACTURACI ON.ImpotroIVA)-(FACTURACION.Visados+FACTURACION.Retenciones))*((F ACTURACION.IVA/100)+1))+FACTURACION.ImpsinIVa ,2) AS A_COBRAR, ROUND( IF(sum(COBROS.Cobrado)>0.01,sum(COBROS.Cobrado), 0) ,2) AS COBRADO, ROUND( ...
  #1 (permalink)  
Antiguo 26/03/2008, 06:30
 
Fecha de Ingreso: enero-2008
Mensajes: 15
Antigüedad: 16 años, 3 meses
Puntos: 0
Consulta condicional

Hola, tengo la siguiente consulta:

SELECT FACTURACION.Codigo, FACTURACION.Referencia, referencias.PROYECTO, FACTURACION.Fecha,

ROUND( (((FACTURACION.Importe_1+FACTURACION.Importe_2+FAC TURACION.Importe_3+FACTURACION.Importe_4+FACTURACI ON.ImpotroIVA)-(FACTURACION.Visados+FACTURACION.Retenciones))*((F ACTURACION.IVA/100)+1))+FACTURACION.ImpsinIVa ,2) AS A_COBRAR,

ROUND( IF(sum(COBROS.Cobrado)>0.01,sum(COBROS.Cobrado), 0) ,2) AS COBRADO,

ROUND( ((((FACTURACION.Importe_1+FACTURACION.Importe_2+FA CTURACION.Importe_3+FACTURACION.Importe_4+FACTURAC ION.ImpotroIVA)-(FACTURACION.Visados+FACTURACION.Retenciones))*((F ACTURACION.IVA/100)+1))+FACTURACION.ImpsinIVa)- IF(sum(COBROS.Cobrado)>0.01,sum(COBROS.Cobrado), 0) ,2) AS PENDIENTE

FROM (FACTURACION LEFT JOIN referencias ON FACTURACION.Referencia=referencias.REFERENCIA) LEFT JOIN COBROS ON FACTURACION.Codigo=COBROS.Codigo_fra

GROUP BY FACTURACION.Codigo,FACTURACION.Referencia,referenc ias.PROYECTO, FACTURACION.Fecha

ORDER BY Fecha DESC

Mi problema viene al darle la condicón 'PENDIENTE > 0'


he probado con:

WHERE (ROUND( ((((FACTURACION.Importe_1+FACTURACION.Importe_2+FA CTURACION.Importe_3+FACTURACION.Importe_4+FACTURAC ION.ImpotroIVA)-(FACTURACION.Visados+FACTURACION.Retenciones))*((F ACTURACION.IVA/100)+1))+FACTURACION.ImpsinIVa)- IF(sum(COBROS.Cobrado)>0.01,sum(COBROS.Cobrado), 0) ,2))>0

Pero no funciona. ¿Qué puedo hader?
  #2 (permalink)  
Antiguo 26/03/2008, 08:29
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 3 meses
Puntos: 13
Re: Consulta condicional

no puedes utilizar un alias en el where.

WHERE ROUND( ((((FACTURACION.Importe_1+FACTURACION.Importe_2+FA CTURACION.Importe_3+FACTURACION.Importe_4+FACTURAC ION.ImpotroIVA)-(FACTURACION.Visados+FACTURACION.Retenciones))*((F ACTURACION.IVA/100)+1))+FACTURACION.ImpsinIVa)- IF(sum(COBROS.Cobrado)>0.01,sum(COBROS.Cobrado), 0) ,2)>0

Si lo dejas asi, le he quitado el parentesis que envuelve el round deberia funcionar.

Si no te funciona hazlo con una subconsulta, que quizas sea más rapido que meter todo el calculo en el where.


Salu2
  #3 (permalink)  
Antiguo 26/03/2008, 13:39
 
Fecha de Ingreso: enero-2008
Mensajes: 15
Antigüedad: 16 años, 3 meses
Puntos: 0
Re: Consulta condicional

Lo he solucionado por medio de un CREATE TABLE y una segunda consulta, ya que la solución propuesta no me funciona y no consigo solucionarlo por medio de subconsulta.

Te agradeciría que me explicases lo de la subconsulta.

Unj saludo
  #4 (permalink)  
Antiguo 27/03/2008, 04:05
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 3 meses
Puntos: 13
Re: Consulta condicional

BUenas, lo de crear una tabla no es buena solucion.

Subconsulta:
select sub.codigo, sub.pendiente
from
(
SELECT
FACTURACION.Codigo,
...
ROUND(((((....))))) as pendiente
FROM tus_tablas
WHERE ...
) sub
where sub.pendiente > 0;

Ahora si puedes utilizar pendiente.

Salu2
  #5 (permalink)  
Antiguo 27/03/2008, 13:43
 
Fecha de Ingreso: enero-2008
Mensajes: 15
Antigüedad: 16 años, 3 meses
Puntos: 0
Re: Consulta condicional

Muchas Gracias.
De esta forma es realmente sencillo.
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 03:07.