![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Sacar habitaciones libres por dia - Problema consulta SQL-
Hola, me reincorporo al trabajo despues de las vacaciones
y no se será el sindrome post-vacacional ó que , que se me ha atragantado una consulta. Vereis estoy habciendo la gestión de un hotel y quiero hallar las habitaciones libres por día y tipo de habitación para colocar el resultado en el planning de ocupacion del hotel. Para ello utilizo un procedimiento almacenado, ya que al ser una consulta grande me parece mucho mas rapido, al hacer la consulta directamente en Interbase 5 , tambien utilizo Delphi 6. Para hallar las habitaciones libres utilizo 3 tablas, 1.- La Tabla habitacion que es donde guardo todas las habitaciones existentes en el hotel. 2.- La Tabla reserva, que es donde registro todas las reservas hechas por un cliente y que habitacion/es ha reservado. 3.- La Tabla estancia, que es donde guardo todas las estancias de los clientes, es decir, si el cliente ya está en el hotel la reserva pasa ha estancia. Por lo tanto mi procedimiento almacenado queda de la siguiente forma: Código:
SET TERM!!; CREATE PROCEDURE LIBRES_TIPO (FI DATE, FF DATE) RETURNS(NUM INTEGER,TIPO VARCHAR(10)) AS BEGIN FOR SELECT COUNT(DISTINCT(COD_HAB)),TIPO FROM HABITACION WHERE HABITACION.COD_HAB NOT IN (SELECT COD_HAB FROM ESTANCIA WHERE (((ESTANCIA.FECHAI>=:FI) AND (ESTANCIA.FECHAF<=:FF)) OR ((ESTANCIA.FECHAI<=:FI) AND ((ESTANCIA.FECHAF>=:FI) AND (ESTANCIA.FECHAF<=:FF))) OR (((ESTANCIA.FECHAI>=:FI) AND (ESTANCIA.FECHAI<=:FF)) AND (ESTANCIA.FECHAF>=:FF)) OR ((ESTANCIA.FECHAI<=:FI) AND (ESTANCIA.FECHAF>=:FF)))) AND HABITACION.COD_HAB NOT IN (SELECT HAB_RESERVADA.COD_HAB FROM HAB_RESERVADA,RESERVA WHERE HAB_RESERVADA.COD_R=RESERVA.COD_R AND (((RESERVA.FECHAI>=:FI) AND (RESERVA.FECHAF<=:FF)) OR ((RESERVA.FECHAI<=:FI) AND ((RESERVA.FECHAF>=:FI) AND (RESERVA.FECHAF<=:FF))) OR (((RESERVA.FECHAI>=:FI) AND (RESERVA.FECHAI<=:FF)) AND (RESERVA.FECHAF>=:FF)) OR ((RESERVA.FECHAI<=:FI) AND (RESERVA.FECHAF>=:FF)))) group by tipo INTO :NUM,:TIPO DO BEGIN SUSPEND; END END!! SET TERM;!! tipo que hay entre esas 2 fechas, que generalmente suele ser un mes, por ejemplo: del FI = 01/08/05 y FF= 31/08/05. Yo necesito que ademas de esto me lo saque por días, es decir, que me saque el nº de habitaciones libres segun el tipo de habitaciones que sea (INDIVIDUAL, DOBLE, SUITE...) por día desde entre esta fecha fi y ff. Por ejemplo si cojo el mes de agosto que me saque las habitaciones libres por tipo del día 1,2,3,4,5.... así hasta el día 31. Lo he intentado con el Extract pero me da error. Por favor si alguien puede ayudarme. Muchas gracias por todo Última edición por VRO fecha: 01-09-2005 a las 11:16:43. |
|
|
![]() |
|