2/8
Affichage d'une liste: suivi patient CD4
Jusqu'à maintenant, le SQL calcule des nombres - par exemple le nombre de dossiers - puis on affiche ce nombre. Mais si on veut sortir toute une liste, par exemple la liste détaillée des dossiers ?

Ah oui, comme dans Requêtes sur les dossiers qui sort la liste des dossiers avec des données en colonne (ex. CD4 à M6, M12).
En fait, si la requête SQL demande une liste, le rapport affichera la liste, en ajoutant les lignes et colonnes nécessaires. La liste vient s'insérer dans le rapport.
Un exemple simple:

#### sql ####
list_doss<-SELECT Ref_ FROM Doss
#### affichage ####
N° des dossiers :
list_doss


Parfait, donc on peut obtenir le même résultat que dans les Requêtes sur les dossiers ?

Oui, il suffit de saisir la bonne requête SQL... C'est parfois un peu compliqué et il faut passer dans ce cas par des tables temporaires.
Exemple pour le suivi biologique des patients sous ARV :

#### sql ####
DROP TABLE IF EXISTS tmp_debu_arv
CREATE TEMPORARY TABLE tmp_debu_arv (Doss INT,Dat_ DATETIME)
INSERT INTO tmp_debu_arv (Doss,Dat_) SELECT Doss,MIN(Dat_) FROM MediCons WHERE Arv0Prsc<>'' OR Arv1Prsc<>'' OR Arv2Prsc<>'' OR Arv3Prsc<>'' GROUP BY Doss
DROP TABLE IF EXISTS tmp_cd4
CREATE TEMPORARY TABLE tmp_cd4 (Doss INT,Dat_ DATETIME,Cd4_ INT)
INSERT INTO tmp_cd4 (Doss,Dat_,Cd4_) SELECT Doss,LaboDat_,Cd40 FROM Entr WHERE Cd40>0 ORDER BY LaboDat_
DROP TABLE IF EXISTS tmp_cd4_m0
CREATE TEMPORARY TABLE tmp_cd4_m0 (Doss INT,Dat_ DATETIME,Cd4_ INT)
INSERT INTO tmp_cd4_m0 (Doss,Dat_,Cd4_) SELECT tmp_cd4.Doss,tmp_cd4.Dat_,tmp_cd4.Cd4_ FROM tmp_cd4,tmp_debu_arv WHERE tmp_cd4.Doss=tmp_debu_arv.Doss AND tmp_cd4.Dat_ BETWEEN DATE_SUB(tmp_debu_arv.Dat_,INTERVAL 3 MONTH) AND DATE_ADD(tmp_debu_arv.Dat_,INTERVAL 3 MONTH) GROUP BY tmp_cd4.Doss
DROP TABLE IF EXISTS tmp_cd4_m6
CREATE TEMPORARY TABLE tmp_cd4_m6 (Doss INT,Dat_ DATETIME,Cd4_ INT)
INSERT INTO tmp_cd4_m6 (Doss,Dat_,Cd4_) SELECT tmp_cd4.Doss,tmp_cd4.Dat_,tmp_cd4.Cd4_ FROM tmp_cd4,tmp_debu_arv WHERE tmp_cd4.Doss=tmp_debu_arv.Doss AND tmp_cd4.Dat_ BETWEEN DATE_ADD(tmp_debu_arv.Dat_,INTERVAL 3 MONTH) AND DATE_ADD(tmp_debu_arv.Dat_,INTERVAL 9 MONTH) GROUP BY tmp_cd4.Doss
suivi_doss_arv<-SELECT Ref_,DATE_FORMAT(OuvrDat_,'%d/%m/%Y'),IF(RensSexe=1,'H','F'),RensAge_,(SELECT DATE_FORMAT(Dat_,'%d/%m/%Y') FROM tmp_debu_arv WHERE tmp_debu_arv.Doss=Doss.Nume),Arv_Desi,(SELECT Cd4_ FROM tmp_cd4_m0 WHERE tmp_cd4_m0.Doss=Doss.nume),(SELECT Cd4_ FROM tmp_cd4_m6 WHERE tmp_cd4_m6.Doss=Doss.nume) FROM Doss WHERE Arv_Desi<>''
#### affichage ####
Dossier|Ouverture|Sexe|Age|Début ARV|Protocole en cours|CD4 M0|CD4 M6
suivi_doss_arv


Dans cet exemple, l'examen de CD4 est considéré comme m0 (c-à-d initial) s'il date entre 3 mois avant la date de début de prescription d'ARV et 3 mois après cette date. Le CD4 à m6 est compris entre 3 et 9 mois après cette date.