Taux occupation [Résolu]

citt 213 Messages postés dimanche 8 juin 2003Date d'inscription 9 février 2012 Dernière intervention - 9 sept. 2008 à 11:31 - Dernière réponse : citt 213 Messages postés dimanche 8 juin 2003Date d'inscription 9 février 2012 Dernière intervention
- 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
Afficher la suite 

Votre réponse

3 réponses

Meilleure réponse
citt 213 Messages postés dimanche 8 juin 2003Date d'inscription 9 février 2012 Dernière intervention - 12 sept. 2008 à 09:57
3
Merci
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

Merci citt 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de citt
crn_c21 303 Messages postés samedi 24 janvier 2004Date d'inscription 4 février 2011 Dernière intervention - 9 sept. 2008 à 14:09
0
Merci
Peux tu écrire ta requète!!
Commenter la réponse de crn_c21
citt 213 Messages postés dimanche 8 juin 2003Date d'inscription 9 février 2012 Dernière intervention - 9 sept. 2008 à 14:31
0
Merci
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
Commenter la réponse de citt

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.