domingo, 9 de diciembre de 2012

Resolución ejercicio final (14) - Listar Albaranes de un Proveedor



RESOLUCIÓN DEL PUNTO 11 DEL ENUNCIADO DEL EJERCICIO FINAL.

En esta entrada resolveremos el punto 11:
Listar Albaranes de un Proveedor.





Lo que se desea realmente es obtener los encabezados de las facturas de un único cliente.

select * from cab_fv where id_cliente = 1;






NOTA: Aunque la consulta anterior si que responde al punto 11 del enunciado, suele ser normal, añadir al lado del encabezado del albarán el total del mismo.

Para obtener el total en el listado es preciso realizar una consulta en la que además se sumen todas las líneas de cada albarán.

Para ello se realizará un join a tres tablas.




Pero antes es preciso multiplicar el precio neto de cada artículo, por la cantidad de unidades, y por aplicarle el IVA correspondiente.

select cab_ac.*,
round(sum(neto * cantidad * ((100.0 + tipo_iva) / 100.0)),2) as total
from cab_ac left join lin_ac
on cab_ac.id_ac = lin_ac.id_ac
inner join ivas
on lin_ac.iva = ivas.codigo_iva
where id_proveedor = 1
group by lin_ac.id_ac;



NOTA: Se han vinculado tres tablas mediante joins. Para que sea más fácil de visualizar el total se redondea con la función Round.

Resolución ejercicio final (13) - Listar Facturas de un Cliente


RESOLUCIÓN DEL PUNTO 10 DEL ENUNCIADO DEL EJERCICIO FINAL.

En esta entrada resolveremos el punto 10:
Listar Facturas de un Cliente.



Lo que se desea realmente es obtener los encabezados de las facturas de un único cliente.

select * from cab_fv where id_cliente = 1;




NOTA: Aunque la consulta anterior si que responde al punto 10 del enunciado, suele ser normal, añadir al lado del encabezado de la factura el total de la misma.

Para obtener el total en el listado es preciso realizar una consulta en la que además se sumen todas las líneas de cada factura.

Para ello se realizará un join a tres tablas.



Pero antes es preciso multiplicar el precio neto de cada artículo, por la cantidad de unidades, y por aplicarle el iva correspondiente.

select cab_fv.*,
round(sum(neto * cantidad * ((100.0 + tipo_iva) / 100.0)),2) as total
from cab_fv left join lin_fv
on cab_fv.id_fv = lin_fv.id_fv
inner join ivas
on lin_fv.iva = ivas.codigo_iva
where id_cliente = 1
group by lin_fv.id_fv;



NOTA: Se han vinculado tres tablas mediante joins. Para que sea más fácil de visualizar el total se redondea con la función Round.

viernes, 7 de diciembre de 2012

Resolución ejercicio final (12) - Listar Facturas entre fechas.



RESOLUCIÓN DEL PUNTO 9 DEL ENUNCIADO DEL EJERCICIO FINAL.

En esta entrada resolveremos el punto 9:
Listar Facturas entre fechas.



Se trata de filtrar cabeceras de factura entre fechas, indicando una fecha mayor y una menor.

En este caso se pueden comparar las fechas con los operadores mayor o igual que o menor o igual que.

Otra opción es utilizar el operador BETWEEN.

Opción 1 - Mayor o igual que y menor o igual que:

select * from cab_fv where fecha >= "2012-11-22" AND  fecha <= "2012-11-22"; 



NOTA: Se ha usado la comparación mayor o igual y menor o igual, aunque se podrían usar otras comparaciones. Se ha hecho así porque la segunda opción, mediante BETWEEN, implica que la primera fecha debe ser menor que la segunda y ambas inclusive salen en el resultado.


Opción 2 - Mayor o igual que y menor o igual que:

select * from cab_fv where fecha BETWEEN "2012-11-22" AND "2012-11-22"; 



NOTA: Se debe hacer notar que para indicar fechas, se pasa una cadena a la consulta en la que la fecha se indica de la forma año-mes-dia. De la siguiente manera "AAAA-MM-DD". Este formato de fechas es convertido entre tipo cadena y tipo fecha directamente por MySQL.

Resolución ejercicio final (11) - Ver cabecera de factura




RESOLUCIÓN DEL PUNTO 8 DEL ENUNCIADO DEL EJERCICIO FINAL.

En esta entrada resolveremos el punto 8:
Ver cabeceras de factura.



Cuando se busquen las cabeceras de facturas de venta, siempre se conocerá el número de factura almacenado en el campo id_fv, también es habitual buscar las cabeceras filtrando por el id_cliente.

select * from cab_fv where id_fv = 1; 


NOTA: En este caso se obtiene una única fila en el ResultSet, dado que solo existe una cabecera por cada factura.

Resolución ejercicio final (10) - Ver líneas de factura



RESOLUCIÓN DEL PUNTO 7 DEL ENUNCIADO DEL EJERCICIO FINAL.

En esta entrada resolveremos el punto 7:
Ver líneas de factura.


Cuando se busquen las líneas de facturas de venta, siempre se conocerá el número de factura almacenado en el campo id_fv.

select * from lin_fv where id_fv = 1; 


jueves, 6 de diciembre de 2012

Resolución ejercicio final (9) - Crear un único listado que incluya los emails de Clientes y Proveedores.


RESOLUCIÓN DEL PUNTO 6 DEL ENUNCIADO DEL EJERCICIO FINAL.

En esta entrada resolveremos el punto 6:
Crear un único listado que incluya los emails de Clientes y Proveedores.



Al igual que al localizar los clientes sin email, para localizar los clientes con email será preciso comprobar dos condiciones.

Por un lado que el campo no es nulo.
select * from clientes where email is not NULL; 

Sin embargo con esta condición aparecerán en el listado los clientes a los que se les ha borrado el email o a los que se les ha inicializado el email a una cadena vacía.

Por lo tanto será preciso comprobar también aquellos campos que sean distintos de la cadena vacía.

select * from clientes where email <> "";

Para que la consulta conjunta funcione es preciso unirlas mediante el operador AND.

select nombre, email from clientes 
    where email is not NULL AND email <> "";



Pero el enunciado pide un único listado en el que se incluyan también los emails de los proveedores.

Para obtener un listado de emails de proveedores se usará la siguiente sentencia:


select nombre, email from proveedores
    where email is not NULL AND email <> "";


Para responder correctamente al enunciado, se deberá obtener una salida en la que se muestren los resultados de las dos consultas anteriores.

Para obtener ese resultado es posible unir las dos consultas mediante el operador UNION ALL o UNION (dependiendo de si deseamos que se muestren los datos repetidos o no.

NOTA: En este caso al querer obtener un listado de emails, no sería lógico obtener datos repetidos, por lo que usaremos el operador UNION.


select nombre, email from proveedores
    where email is not NULL AND email <> ""
UNION
select nombre, email from clientes
    where email is not NULL AND email <> "";



NOTA: En la imagen anterior se ven, en un recuadro en rojo los emails correspondientes a los proveedores, y en un recuadro verde parte de los emails correspondientes a los clientes.

Resolución ejercicio final (8) - Listar Proveedores sin email.


RESOLUCIÓN DEL PUNTO 5 DEL ENUNCIADO DEL EJERCICIO FINAL.


En esta entrada resolveremos el punto 5:
Listar Proveedores sin email.





El proceso para localizar a los proveedores sin email, es idéntico al realizado para obtener los clientes sin email.

Por lo tanto el campo podrá contener el valor NULL  o el valor cadena vacía, por lo tanto será necesario utilizar el operador OR.

select * from clientes where email = "" OR email is NULL;


En este caso el resultado es un Empty set (un DataSet vacío), debido a que todos los clientes tienen email.