Bonjour,
J'ai une base de donnée Sybase. Parmi un grand nombre de tables, je suis intéressé par 3 d'entre elles:
1-Patient (contenant les données démographiques de patients)
2-TargetVol (Diagnostic, cible du traitement, stade, etc...)
3-Series (Séries de traitements, cible du traitement, etc...)
La valeur commune entre toutes les tables est l'ID d'un patient.
Je dois compulser des données provenant de ces trois tables: quel est le stade de la maladie (table TargetVol) pour les patients (table Patient) qui ont fini le traitement (table Series et Patient).
J'ai essayé de saucissonner le problème:
1-Quels sont les séries de traitements terminées pour les patients qui ont fini le traitement (il peut exister des séries terminées pour des patients qui n'ont pas fini le traitement - TreatStat différent de SEP - et des séries terminées pour des patients qui ont fini le traitement et déjà archivées - TreatStat = SEP mais SeriStat différent de 5):
donnant comme résultat:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 SELECT DISTINCT p.PIDno, p.PersNo, t.TargetNo FROM Patient p INNER JOIN Series t ON p.PIDno=t.PIDno WHERE p.TreatStat LIKE 'SEP' AND t.SeriStat = 5
PIDno PersNo TargetNo
4706 28.11.07bl 4
1138 36.06.18dr 3
1138 36.06.18dr 2
3948 39.02.20za 3
4707 52.02.23pg 1
4716 57.05.23ms 4
4716 57.05.23ms 3
4716 57.05.23ms 2
4716 57.05.23ms 1
4695 59.09.26mmmd 1
C'est un premier pas. J'ai tous les patients cherchés, il ne manque que le stade.
2- Quel est le stade de la maladie pour les patients qui ont fini le traitement:
avec pour résultat
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 SELECT DISTINCT q.PIDno, q.PersNo, c.TargetNo, c.Stage FROM Patient q INNER JOIN TargetVol c ON q.PIDno=c.PIDno WHERE q.TreatStat LIKE 'SEP'
PIDno PersNo TargetNo Stade
4706 28.11.07bl 1 ---
4706 28.11.07bl 4 ---
4706 28.11.07bl 2 ---
4706 28.11.07bl 3 ---
1138 36.06.18dr 3 ---
1138 36.06.18dr 2 ---
1138 36.06.18dr 1 T3N0M0
3948 39.02.20za 2 ---
3948 39.02.20za 3 ---
3948 39.02.20za 1 ---
4707 52.02.23pg 1 pT3bpN0M0
4716 57.05.23ms 4 T2 N2c Mx
4716 57.05.23ms 3 T2 N2c Mx
4716 57.05.23ms 1 T2 N2c Mx
4716 57.05.23ms 2 T2 N2c Mx
4695 59.09.26mmmd 1 pT1cpN0M0
La différence entre ces deux résultats est que certaines lignes apparaissent en plus dans le deuxième résultat. Par conséquent, à mon sens, la solution à mon problème est une jointure de ces deux résultats de telle sorte que toutes les lignes du premier soient complétées par les information supplémentaires apparaissant dans le second, seulement pour les lignes qui apparaissent dans les deux. J'ai essayé (entre autres) le code:
mais le résultat est sensiblement égal au deuxième... c'est comme si mon code ne tenait pas compte que tous les t.TargetNo n'apparaissent pas dans la table a!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 SELECT DISTINCT a.PIDno, a.PersNo, a.Stage, a.TargetNo FROM ( SELECT DISTINCT q.PIDno, q.PersNo, c.TargetNo, c.Stage FROM Patient q INNER JOIN TargetVol c ON q.PIDno=c.PIDno WHERE q.TreatStat LIKE 'SEP' ) a , ( SELECT DISTINCT p.PIDno, p.PersNo, t.TargetNo FROM Patient p INNER JOIN Series t ON p.PIDno=t.PIDno WHERE p.TreatStat LIKE 'SEP' AND t.SeriStat = 5 ) b HAVING a.TargetNo = b.TargetNo ORDER BY 2 ASC
J'ai l'impression que c'est un problème trivial, mais je ne m'en sors pas. Je vous remercie de votre aide.
Partager