Se connecter avec
S'enregistrer | Connectez-vous

[RESOLU] Aide sur exo SQL ! SVP

Dernière réponse : dans Programmation

Bonjour

Je dois faire 2 requete SQL à partir schema relationnel avec ces deux ennoncés

3.1 Quels patients (Numéro de dossier, Nom, Prénom) ont occupé la chambre n°12 entre le 1er et le 31 janvier 2010 ?
3.2 On désire obtenir un état statistique qui fournisse le nombre d’hospitalisations pour chaque patient
(NumDossier, Nompatient, Nb hospitalisation)


Schéma relationnel
Chambre ( NumChambrez, NbLits, NomBat)
Occupation Chambre (NumOccup, DateDebut, DateFin, #NumChambre, #NumEntrée)
Hospitalisation (NumEntrée, NomMedTraitant, #NumDossier)
Patient (NumDossier, NomPatient, PrénomPatient, AdPatient, NumSSPatient)

Voici le 1er (est il correcte??)mais le second je n'y arrive pas ...
3. SQL
3.1
SELECT H.NumDossier, NomPatient, PrénomPatient COUNT (*)
FROM OccuaptionChambrez OC, Patient P, Hospitalisation H
WHERE OC.NumEntrée = H. NumEntrée
AND H. NumDossier = P.NumDossier
AND NumChambre = ‘12’
AND DateDebut = ‘01/01/2010’
AND DateFin = ‘31/01/10’

D'avance merci :) 

Autres pages sur : resolu aide exo sql svp

Lassé par la pub ? Créez un compte
Expert Programmation

Salut,

Ta 1 n'est pas correcte non. Tu n'as pas fait de base de données afin de pouvoir tester tes requêtes ? C'est difficile de s'assurer qu'elles sont bonnes sinon.

Pour le 3.1:
  • On veut les patients qui ont été là entre le 01/01/2010 et 31/01/2010, ce que tu as fait c'est de prendre seulement le patient (à condition qu'il y en ait un) qui est arrivé le 01/01/2010 et parti le 31/01/2010
    Il ne faut pas mettre de symbole égal, mais des comparaisons, pour avoir ceux dont la date de début est supérieure ou égale au 1er janvier, et dont la date de fin est inférieure ou égale au 31 janvier.
  • Un coup tu utilises comme format de date DD/MM/YYYY et un coup DD/MM/YY
  • Tu n'as pas de virgule entre le PrénomPatient et COUNT(*)

    Pour le 3.2:
  • Ca va nécessiter l'utilisation d'un GROUP BY
    Expert Programmation

    Ta requête me semble presque bonne à deux détail près:
    - DateDebut >= '01/01/2010' AND DateFin <= '31/01/10' (sinon tu prends uniquement les entrées du 01 janvier avec sortie le 31 décembre)
    - Ton COUNT() est inutile et risque de bloquer.
    1. SELECT H.NumDossier, P.NomPatient, P.PrénomPatient
    2. FROM Patient P
    3. JOIN Hospitalisation H ON P.NumDossier = H.NumDossier
    4. JOIN OccupationChambre OC ON OC.NumEntrée = H.NumEntrée
    5. WHERE OC.NumChambre = ‘12’
    6. AND OC.DateDebut = ‘01/01/2010’
    7. AND OC.DateFin = ‘31/01/10’


    Pour la seconde, c'est un select count(distinct(NumEntrée)) avec un group sur le NumSSPatient (qui est normalement unique pour chaque patient)
    Lassé par la pub ? Créez un compte
    Tom's guide dans le monde