Taux occupation

Résolu
citt Messages postés 209 Date d'inscription dimanche 8 juin 2003 Statut Membre Dernière intervention 9 février 2012 - 9 sept. 2008 à 11:31
citt Messages postés 209 Date d'inscription dimanche 8 juin 2003 Statut Membre Dernière intervention 9 février 2012 - 12 sept. 2008 à 09:57
Bonjour,

Je voudrait savoir comment réaliser une requete me donnant le taux d'occupation de chambres.
Voici ma table :

CREATE TABLE [dbo].[reservation] (
    [Id] [int] IDENTITY (1, 1) NOT NULL ,
    [id_chambre] [int] NULL ,
    [dt_deb] [datetime] NULL ,
    [dt_fin] [datetime] NULL 
) ON [PRIMARY]
GO


et voici les données :

INSERT INTO reservation(id_chambre, dt_deb, dt_fin) VALUES(1, '2008-08-01', '2008-08-05');
INSERT INTO reservation(id_chambre, dt_deb, dt_fin) VALUES(1, '2008-08-06', '2008-08-15');
INSERT INTO reservation(id_chambre, dt_deb, dt_fin) VALUES(1, '2008-08-16', '2008-08-30');
INSERT INTO reservation(id_chambre, dt_deb, dt_fin) VALUES(2, '2008-07-25', '2008-09-30');
INSERT INTO reservation(id_chambre, dt_deb, dt_fin) VALUES(3, '2008-08-05', '2008-09-30');



Et la je voudrait connaitre le taux d'occupation pour le mois 08, j'ai creer une requete pour le moment mais elle n'arrive pas a prendre en compte pour la chambre ayant l'id 2 qu le taux d'occupation est a 100%

Qq a deja eut ca a faire ?

Merci d'avance,

Citt_jr
Bats toi avec les meilleurs, crève avec le reste

http://www.tsubara.net

3 réponses

citt Messages postés 209 Date d'inscription dimanche 8 juin 2003 Statut Membre Dernière intervention 9 février 2012 3
12 sept. 2008 à 09:57
Voila j'ai trouvé la solution :

DECLARE @Dt_Deb_Month AS datetime;
DECLARE @Dt_Fin_Month AS datetime;

SET @Dt_Deb_Month = convert(datetime, '2008-08-01');
SET @Dt_Fin_Month = DateAdd ("d", -1 ,DateAdd ("m", 1 ,@Dt_Deb_Month));

DECLARE @Nb_Jours_Mois AS integer;

SET @Nb_Jours_Mois = DateDiff("d", @Dt_Deb_Month , DateAdd ("m", 1 , @Dt_Deb_Month))

-- Donne le premier jour du mois, le dernier et le nombre de jour du mois
SELECT @Dt_Deb_Month, @Dt_Fin_Month, @Nb_Jours_Mois

SELECT
SUM( CASE WHEN Dt_Deb >= @Dt_Deb_Month AND Dt_FIn <= @Dt_Fin_Month THEN (DATEDIFF("d", Dt_Deb, Dt_Fin)+1)
    WHEN Dt_Deb < @Dt_Deb_Month AND Dt_FIn <= @Dt_Fin_Month THEN (DATEDIFF("d", @Dt_Deb_Month, Dt_Fin)+1)
    WHEN Dt_Deb >= @Dt_Deb_Month AND Dt_FIn > @Dt_Fin_Month THEN (DATEDIFF("d", Dt_Deb, @Dt_Fin_Month)+1)
    WHEN Dt_Deb < @Dt_Deb_Month AND Dt_FIn > @Dt_Fin_Month THEN @Nb_Jours_Mois
END) as Nb_Jours, id_chambre

FROM reservation

WHERE  ((Dt_Deb > @Dt_Deb_Month AND (Dt_Deb < @Dt_Fin_Month OR Dt_Fin < @Dt_Fin_Month)) OR
       (@Dt_Deb_Month > Dt_Deb AND (@Dt_Deb_Month < Dt_Fin OR @Dt_Fin_Month < Dt_Fin)) OR
       (Dt_Deb = @Dt_Deb_Month AND (Dt_Fin IS NOT NULL AND @Dt_Fin_Month IS NOT NULL)))
GROUP BY id_chambre

Citt_jr
Bats toi avec les meilleurs, crève avec le reste

http://www.tsubara.net
3
crn_c21 Messages postés 302 Date d'inscription samedi 24 janvier 2004 Statut Membre Dernière intervention 4 février 2011
9 sept. 2008 à 14:09
Peux tu écrire ta requète!!
0
citt Messages postés 209 Date d'inscription dimanche 8 juin 2003 Statut Membre Dernière intervention 9 février 2012 3
9 sept. 2008 à 14:31
Voici le début de ma requête :
SELECT SUM((DATEDIFF("d", Dt_Deb, Dt_Fin)+1)), id_chambre
FROM reservation
WHERE ((Dt_Deb > convert(datetime, '2008-08-01') AND (Dt_Deb < convert(datetime, '2008-08-30') OR Dt_Fin < convert(datetime, '2008-08-30'))) OR
       (convert(datetime, '2008-08-01') > Dt_Deb AND (convert(datetime, '2008-08-01') < Dt_Fin OR convert(datetime, '2008-08-30') < Dt_Fin)) OR
       (Dt_Deb = convert(datetime, '2008-08-01') AND (Dt_Fin IS NOT NULL AND convert(datetime, '2008-08-30') IS NOT NULL)))
GROUP BY id_chambre

Elle me permet de récupérer le nombre de jour d'occupation, mais elle prend en compte trop de valeur !!

Citt_jr
Bats toi avec les meilleurs, crève avec le reste

http://www.tsubara.net
0