Sentencia SQL dificil

seba_m

Lanero Regular
20 Dic 2005
45
Hola, laneros,

El tema es asi:

Necesito hacer una sentencia sql que involucre datos de dos tablas de manera ta que:
De una tabla de facturas y una tabla de facturas anuladas,
Necesito un likstado de manera tal que filtre por fechas las facturas, por ejemplo quiero las facturas de un determinado mes, pero necesito que en la campo razon social, si el numero de factura aparece en la tabla facturas anuladas, me ponga Anulada, y si no es asi me deje la razon social porpiamente dicha.
Ademas si detecta que el numero de factura fue anulada, que en los campos de prcio aparezcan en cero.

espero me comprendan.

GRacias
 
Una solución es hacer una UNION.

1. Primer SELECT: usted hace un JOIN con la tabla de facturas anuladas y le "quema" en la razón social el "Anulada". Algo así

SELECT NumFactura, 'Anulada' ... FROM .... JOIN ...

2. Segundo SELECT: Lo contrario, se trae los que NO apare .. bla bla ... esto puede lograrlo haciendo un LEFT JOIN con la tabla de facturas anuladas y condicionando el campo con que hace la relación "IS NULL" para que le traiga sólamente las que no están hay.

Esto es una alternativa. Pero de una le digo si esta sentencia es para un software esa base de datos está mal diseñada y requiere un par de "formitas normales más". Una sentencia de estas es realmente ineficiente.

Otra solución es también hacer una vista con la sentencia, pero aún así sólo es por salir del paso y la penalización se sigue pagando.

Suerte.

PD: El mismo principio que aplica a la razón social, aplica a los valores numéricos que quiere dejar en cero.
 
Pues mano si es complicado pero yo lo haria haciendo el filtro en la primera consulta, luego haria en las condiciones una buskeda en la segunda tabla, alli haria un case y validaria lo de si esta anulada y de los campos de principio en 0000, ojala te sirva voy a tratar de darte un ejemplo si me keda tiempo....
 
en MySQL que es lo que más manejo en este momento yo haría lo siguiente:

PHP:
SELECT f.*, IF(fa.numero_factura IS NOT NULL, 'Anulada', f.razon_social) AS razon_social FROM facturas f
LEFT JOIN facturas_anuladas fa ON (f.numero_factura = fa.numero_factura)
WHERE f.fecha > ... AND f.fecha < ...
 
Usando extensiones de la base de datos sale más fácil. Así como la que mostró Julian en MySQL hay funciones similares para las demás. En otras se llama CASE en lugar de IF hay si toca mirar que motor está usando.
 

Los últimos temas