Bonjour,
J'ai 4 tables (TBL1 à 4)
Pour les tables (TBL1 à 3), j'ai les colonnes suivantes :
a, b, c, d + une colonne e crée via un CASE.
le nom de cette colonne est identique pour les 3 tables, seule la valeur de la modalité est différente.
Pour la table TBL4, j'ai les colonnes suivantes :
a, b, d + une colonne e crée via un CASE. (j'ai donc la colonne C en moins)
le nom de cette colonne est identique à la même colonnes des 3 autres tables, seule la valeur de la modalité est différente.
J'aimerais pouvoir assembler les 4 tables comme suit :
UNION des tables 1 à 3 + colonne de la table 4 hors doublons (basé sur le couple colonnes A ET B.) ne se trouvant pas déjà dans l'UNION des 3 premières.
Pour plus de précision :
A est l'ID d'un dossier
B est une date d'étude
C est une date de décision
D un champ métier commun à toute les tables.
TBL1 est une table des acceptations
TBL2 est une tables des refus
TBL3 est une tables des annulations
TBL4 est une tables des études en cours ET de l'historique EVENTUEL des états transitoires d'un ID dossier AVANT qu'il ai une décision finale (et bascule dans les tables TBL1 à 3)
Le but final est d'avoir une table globale, donnant une vision exhaustive de tous les ID dossiers (ceux ayant eu une décision finale + ceux en cours ne l'ayant pas encore eu)
Le critère sur la table 4 hors doublons est là parce qu'il peut y avoir réutilisation d'un ID dossier non finalisé (n'apparaissant pas dans les tables TBL1 à 3) pour une autre étude (donc en ce cas, on peut avoir un ID identique sur colonne A mais avec une colonne B (date étude) différente).
J'ai d'abord fait un UNION sur les tables 1 à 3 :
mais pour rajouter à cet ensemble uniquement les lignes de la table 4 n'y existant pas déjà selon les critères notés, je peine un peu.
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
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 select * from ( (select a, b, c, d, CASE WHEN a not is NULL THEN 'ACP' END e FROM TBL1 WHERE CONDITIONS ) UNION (select a, b, c, d, CASE WHEN a not is NULL THEN 'RFU' END e FROM TBL1 WHERE CONDITIONS ) UNION (select a, b, c, d, CASE WHEN a not is NULL THEN 'ANU' END e FROM TBL1 WHERE CONDITIONS) )
De plus, il me faudrait faire ça en 1 seule étape globale (je dois exécuter ça sous SQL Developper sans possibilité de créer des tables temporaires).
Je pensais utiliser l'instruction EXCEPT, mais je n'y arrive pas.
Avez-vous des pistes pour m'aider ?
Merci d'avance.
Partager