Bonsoir pilipipich,
Indépendamment des problèmes de performance, solubles ici au moyen d’un index sur la colonne valeur de la table T2, la méthode bourrin ci-dessous vous convient-elle ? A défaut, passer par un PIVOT.
Création des tables à l’image des vôtres :
CREATE TABLE T1
(
eventType INT NOT NULL
, eventTypeNom VARCHAR(32) NOT NULL
, eventTypeDescr VARCHAR(64) NOT NULL
, eventTypeComment VARCHAR(64) NOT NULL
, CONSTRAINT T1_PK PRIMARY KEY (eventType)
)
;
INSERT INTO T1
VALUES
(1, 'transfusion_ref', 'No ref transfusion', 'cf. no lot')
, (2, 'transfusion_volume', 'volume en ml', '')
, (3, 'transfusion_commentaire', 'commentaire associé', '')
, (4, 'transfusion_prescripteur', 'qui a prescrit', '')
, (5, 'transfusion_executant', 'qui a effectué', '')
;
SELECT * FROM T1 ;
=>
eventType eventTypeNom eventTypeDescr eventTypeComment
--------- ---------------------- ------------------- ----------------
1 transfusion_ref No ref transfusion cf. no lot
2 transfusion_volume volume en ml
3 transfusion_commentaire commentaire associé
4 transfusion_prescripteur qui a prescrit
5 transfusion_executant qui a effectué
La table T2
CREATE TABLE T2
(
id INT NOT NULL
, patient INT NOT NULL
, eventNum INT NOT NULL
, eventType INT NOT NULL
, valeur VARCHAR(32) NOT NULL
, CONSTRAINT T2_PK PRIMARY KEY (id, eventType)
) ;
INSERT INTO T2 VALUES (1, 1, 1, 1, '00000') ;
INSERT INTO T2 VALUES (2, 1, 1, 2, '260') ;
INSERT INTO T2 VALUES (3, 1, 1, 3, 'aucun') ;
INSERT INTO T2 VALUES (3, 1, 1, 4, 'Dr X') ;
INSERT INTO T2 VALUES (4, 1, 1, 5, 'IDE1') ;
INSERT INTO T2 VALUES (5, 2, 2, 1, '00010') ;
INSERT INTO T2 VALUES (6, 2, 2, 2, '280') ;
INSERT INTO T2 VALUES (7, 2, 2, 3, 'en urgence') ;
INSERT INTO T2 VALUES (8, 2, 2, 4, 'Dr X') ;
INSERT INTO T2 VALUES (9, 2, 2, 5, 'IDE2') ;
SELECT * FROM T2 ;
=>
id patient eventNum eventType valeur
---- ------- -------- --------- -----------
1 1 1 1 00000
2 1 1 2 260
3 1 1 3 aucun
3 1 1 4 Dr X
4 1 1 5 IDE1
5 2 2 1 00010
6 2 2 2 280
7 2 2 3 en urgence
8 2 2 4 Dr X
9 2 2 5 IDE2
La requête ci-dessous fournit le résultat. Problème : Le nom des colonnes dans le résultat est « en dur ».
SELECT x.eventNum, x.patient
, x.valeur as transfusion_ref
, y.valeur as transfusion_volume
, z.valeur as transfusion_commentaire
, t.valeur as transfusion_prescripteur
, u.valeur as transfusion_executant
FROM (SELECT eventNum, patient, valeur
FROM T2
WHERE eventType = 1) as x
JOIN (SELECT eventNum, valeur
FROM T2
WHERE eventType = 2) as y on x.eventNum = y.eventNum
JOIN (SELECT eventNum, valeur
FROM T2
WHERE eventType = 3) as z on x.eventNum = z.eventNum
JOIN (SELECT eventNum, valeur
FROM T2
WHERE eventType = 4) as t on x.eventNum = t.eventNum
JOIN (SELECT eventNum, valeur
FROM T2
WHERE eventType = 5) as u on x.eventNum = u.eventNum
;
=>
eventNum patient transfusion_ref transfusion_volume transfusion_commentaire transfusion_prescripteur transfusion_executant
1 1 00000 260 aucun Dr X IDE1
2 2 00010 280 en urgence Dr X IDE2
Désolé de ne pas fournir une solution un peu plus magique...