OVH Cloud OVH Cloud

pb de requete

5 réponses
Avatar
Etudiant
bonjour,
j'ai 2 tables Materiel et Location

Materiel : NumSerie
Location : #NumSerie, DateDebut, DateFin

quelle requete dois je faire pour connaitre les matériels qui ne sont
pas loués entre Date1 et Date2

j'ai ecris cela

SELECT DISTINCT Materiel.Marque, Materiel.Type, Materiel.NumSerie,
Materiel.Annee
FROM Materiel
WHERE Materiel.NumSerie NOT IN (SELECT ContratLocation.NumSerieMat FROM
ContratLocation WHERE ContratLocation.DateDebut >= #01/01/2005# AND
ContratLocation.DateFinPrevue <= #10/12/2005#)

mon probleme est que si j'ai un materiel qui est loues du 01/01/2004 ou
05/05/2005 il va me le sortir alors qu'il ne faudrait pas.

Seriez vous d'ou vient l'erreur merci

5 réponses

Avatar
Med Bouchenafa
SELECT DISTINCT M.Marque, M.Type, M.NumSerie, M.Annee
FROM Materiel M INNER JOIN ContratLocation C ON M.NumSerie = C.NumSerieMa
WHERE C.DateDebut BETWEEN '20050101' AND '20051210'

Le delimiteur # est utilisé par ACCESS et non par SQL Server

Bien cordialement
Med Bouchenafa

"Etudiant" a écrit :

bonjour,
j'ai 2 tables Materiel et Location

Materiel : NumSerie
Location : #NumSerie, DateDebut, DateFin

quelle requete dois je faire pour connaitre les matériels qui ne sont
pas loués entre Date1 et Date2

j'ai ecris cela

SELECT DISTINCT Materiel.Marque, Materiel.Type, Materiel.NumSerie,
Materiel.Annee
FROM Materiel
WHERE Materiel.NumSerie NOT IN (SELECT ContratLocation.NumSerieMat FROM
ContratLocation WHERE ContratLocation.DateDebut >= #01/01/2005# AND
ContratLocation.DateFinPrevue <= #10/12/2005#)

mon probleme est que si j'ai un materiel qui est loues du 01/01/2004 ou
05/05/2005 il va me le sortir alors qu'il ne faudrait pas.

Seriez vous d'ou vient l'erreur merci



Avatar
Etudiant
merci mais comment faire pour qu'il teste aussi ma date de fin?
Avatar
bruno reiter [MVP]
mettre BETWEEN '20050101' AND '20051210 23:59' (smalldatetime)
ou BETWEEN '20050101' AND '20051210 23:59:59.997' (datetime)
si on veut ceux du 10/12

br

"Med Bouchenafa" wrote in message
news:
SELECT DISTINCT M.Marque, M.Type, M.NumSerie, M.Annee
FROM Materiel M INNER JOIN ContratLocation C ON M.NumSerie = C.NumSerieMa
WHERE C.DateDebut BETWEEN '20050101' AND '20051210'

Le delimiteur # est utilisé par ACCESS et non par SQL Server

Bien cordialement
Med Bouchenafa

"Etudiant" a écrit :

> bonjour,
> j'ai 2 tables Materiel et Location
>
> Materiel : NumSerie
> Location : #NumSerie, DateDebut, DateFin
>
> quelle requete dois je faire pour connaitre les matériels qui ne sont
> pas loués entre Date1 et Date2
>
> j'ai ecris cela
>
> SELECT DISTINCT Materiel.Marque, Materiel.Type, Materiel.NumSerie,
> Materiel.Annee
> FROM Materiel
> WHERE Materiel.NumSerie NOT IN (SELECT ContratLocation.NumSerieMat FROM
> ContratLocation WHERE ContratLocation.DateDebut >= #01/01/2005# AND
> ContratLocation.DateFinPrevue <= #10/12/2005#)
>
> mon probleme est que si j'ai un materiel qui est loues du 01/01/2004 ou
> 05/05/2005 il va me le sortir alors qu'il ne faudrait pas.
>
> Seriez vous d'ou vient l'erreur merci
>


Avatar
Etudiant
je suis sous access et il a pas l'air de prendre BETWEEN ... ou BETWEEN...
Avatar
Etudiant
je lui ecrit cela
SELECT DISTINCT Materiel.Marque, Materiel.Type, Materiel.NumSerie,
Materiel.Annee, ContratLocation.DateDebut, ContratLocation.DateFinPrevue
FROM Materiel INNER JOIN ContratLocation ON Materiel.NumSerie =
ContratLocation.NumSerieMat
WHERE (ContratLocation.DateDebut between #1/2/2005# and #1/5/2005#) or
(ContratLocation.DateFinPrevue between #1/2/2005# and #1/5/2005#);