Bonjour,
Merci d'avance pour votre aide à la réalisation de la requête d'après le besoin ci-dessous:
J'ai des tâches pères : ANDD, DCDD, ANDS, DCDS et des tâches fils : #ANIF, #ANAE, #ANST, #ANMP
Le besoin est de calculer par requête sur toutes les lignes de ma table la colonne Parent (la colonne explications est juste pour la compréhension).
Il faut prendre un fils et trouver si la date de début de cette tache fils et comprise entre la date de début et de fin d'un père de la table.
Si oui on reporte la famille du père.
Pour le résultat d'un père il faut juste reporter le task code dans la colonne parent par une seconde requête.
Les lettres pour les dates sont fictives.
Task_Code Beginning_Date Ending_Date Parent Explications 1 ANDD x y ANDD 2 #ANIF a z ANDD FILS Car x < a < y 3 #ANAE f k ANDD FILS Car j < f < m 4 #ANST h m DCDD FILS Car i < h < p 5 DCDD i p DCDD 6 #ANIF d b ANDS FILS Car y < d < o 7 #ANAE q p DCDS FILS Car i < q < t 8 #ANMP w b DCDS FILS Car i < w < t 9 #ANST n m DCDS FILS Car z < n < g 10 ANDS y o ANDS 11 DCDS z g DCDS 12 DCDS i t DCDS 13 ANDD j m ANDD 14 #ANAE k t DCDS FILS Car z < k < g 15 ... ... ... ...
Ci-dessous une ébauche de la requête pour le parcours sur les tâches # 'fils' mais cela ne fonctionne pas totalement car il me manque soit une jointure, soit une clause de SELECT dans un WHERE... bref je ne sais pas comment faire.
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 UPDATE [CONCCalculationView] SET [Parent]= (CASE [T2].[TaskCodeCategory_] WHEN 'ANDD' THEN 'ANDD FILS' WHEN 'DCDD' THEN 'DCDD FILS' WHEN 'ANDS' THEN 'ANDS FILS' WHEN 'DCDS' THEN 'DCDS FILS' ELSE NULL END) FROM [CONCCalculationView] AS tblTemp INNER JOIN ( SELECT [Notification_Number], [DateDebut], [Task_Code] AS [TaskCodeCategory_] FROM [CONCCalculationView] WHERE ([Task_Code]='ANIF' OR [Task_Code]='ANAE' OR [Task_Code]='ANST' OR [Task_Code]='ANMP') ) T2 ON tblTemp.[Notification_Number]=T2.[Notification_Number] WHERE (T2.[Task_Code]='ANIF' OR T2.[Task_Code]='ANAE' OR T2.[Task_Code]='ANST' OR T2.[Task_Code]='ANMP') AND (T2.[Beginning_Date] BETWEEN tblTemp.[Beginning_Date] AND tblTemp.[Ending_Date])
Partager