Bonjour,
je viens de découvrir la fonction Case couplée à un agréga qui permet de faire des choses du type :
sachant que mes tables sont de la forme :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 select id_dept, SUM(nb_sejours), SUM(CASE WHEN e.statut = 'pub' THEN nb_sejours ELSE 0 END) nb_sejours_pub, SUM(CASE WHEN e.statut = 'priv' THEN nb_sejours ELSE 0 END) nb_sejours_priv from hospitalisation h inner etablissement e on e.id_etablissement = h.id_etablissement group by id_dept;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 hospitalisation (id_temps, id_etablissement, id_pathologie,...,nb_sejours) etablissement (id_etablissement,..., statut,...)
Imaginons que j'ai une table de travail contenant pour chaque hospitalisation, l'identifiant du patient, celui de l'établissement ainsi que d'autre données.
Je souhaite connaitre le nombre de patients pris en charge dans les établissments privés ainsi que le nombre de patients pris en charge dans les établissments publics.
Code : Sélectionner tout - Visualiser dans une fenêtre à part venues (id_temps, id_patients, id_etablissement,...)
Jusqu'à présent, je faisais deux requêtes dont je retravaillais les résultats :
Est'il possible, à votre avis, d'avoir en une seule requête un résultats du type
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 select id_dept, count(distinct(id_patients)) as nb_patients_pub from venues v inner etablissement e on e.id_etablissement = v.id_etablissement where e.statut='pub' group by id_dept; select id_dept, count(distinct(id_patients)) as nb_patients_priv from venues v inner etablissement e on e.id_etablissement = v.id_etablissement where e.statut='priv' group by id_dept;
id_dept,nb_patients_pub,nb_patients_priv
01,100,150
02,11,22
03,45,75
...
Merci d'avance
Partager