Se connecter / S'enregistrer
Votre question

[RESOLU] Aide sur exo SQL ! SVP

Tags :
  • Sql
  • Programmation
Dernière réponse : dans Programmation
26 Octobre 2010 13:54:02

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

a c 232 L Programmation
26 Octobre 2010 14:30:06

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
    m
    0
    l
    26 Octobre 2010 14:31:22

    Merci :) 
    m
    0
    l
    a c 145 L Programmation
    26 Octobre 2010 14:55:11

    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)
    m
    0
    l
    Tom's guide dans le monde
    • Allemagne
    • Italie
    • Irlande
    • Royaume Uni
    • Etats Unis
    Suivre Tom's Guide
    Inscrivez-vous à la Newsletter
    • ajouter à twitter
    • ajouter à facebook
    • ajouter un flux RSS