Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/05/2008, 09h01   #1
Invité de passage
 
Inscription : mai 2008
Messages : 2
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 2
Points : 1
Points : 1
Par défaut Lister les places disponibles

Bonjour à tous,

je travaille sur sql server2000.
je voudrais faire une requête qui m'affiche les places disponibles d'une voiture.
chaque voiture à cinq place numéroté de 1 a 5
donc j'ai une table Voiture(idVoiture, NumeroPlace)

j'ai une table Facture (idFacture, DateFacture, idVoiture, MontantFacture)
j'ai une table Passager(idFacture, NomPassager, NumeroPlace)

La relation entre la table Facture et la table Voiture : le champ idVoiture
La relation entre la table Facture et la table Passager : le champ idFacture

comment connaître les N° de place disponibles?
par exemple: j'ai fait une facture pour deux passagers en leur attribuant les places 3 et 4, comment faire une requête qui me permet de renvoyer que les places 1 et 2 et 5 sont disponibles?

Merci
Antonio_25 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/05/2008, 15h21   #2
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 959
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 959
Points : 17 793
Points : 17 793
Votre modèle n'est pas bon. Votre table voiture devrait être :
Voiture(idVoiture, NombrePlace).
Dès lors il vous faut en sus une table des nombre entiers (le genre de table que toute base devrait avoir avec une table des dates). Par exemple :
Code :
1
2
CREATE TABLE E (i integer)
INSERT INTO E VALUES (0) ... INSERT INTO E VALUES (999)
Dès lors votre requête va s'écrire :

Code :
1
2
3
4
5
6
7
8
9
10
SELECT i AS PLACE_LIBRE
FROM   E
       INNER JOIN Voiture AS V
             ON i BETWEEN 1 AND V.NombrePlace
       INNER JOIN Facture AS F
             ON V.idVoiture = F.idVoiture
WHERE  F.idFacture = 123
AND    i NOT IN (SELECT NumeroPlace
                 FROM   Passager AS P  
                 WHERE  P.idfacture = F.idfacture)
Comme vous n'avez pas respecter la charte de postage et par conséquent vous n'avez pas mis de jeu d'essais, je ne peut tester cette solution.

Merco à l'avenir de fournir un jeu d'essais !

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2008, 00h53   #3
Invité de passage
 
Inscription : mai 2008
Messages : 2
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 2
Points : 1
Points : 1
Merci SQLPRO de votre réponse elle répond à mes besoins.
Antonio_25 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h14.


 
 
 
 
Partenaires

Hébergement Web