Bonjour,
Dans le code ci-dessous, je fais des sommes avec des 'case'
La table comporte plusieurs lignes pour chaque date.
Je ne sais pas comment faire pour indiquer que pour une même date et un même matricule si on trouve dans les lignes le motif DISPO et SPOASTJ de ne pas mettre la valeur à 1
Merci pour votre aide :
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 SELECT h.DAT, h.MOTIF, SUM( CASE WHEN h.MOTIF = 'SPOASTJ' THEN 1 ELSE 0 END ) AS ASTJ, SUM( CASE WHEN (h.MOTIF = 'DISPO' AND h.HRADEB = '480' AND h.HRAFIN = '1920'AND h.MOTIF != 'SPOASTJ') OR (h.MOTIF = 'DISPO' AND h.HRADEB = '480' AND h.HRAFIN = '1200') THEN 1 ELSE 0 END ) AS DISPJOUR, SUM( CASE WHEN (h.MOTIF = 'DISPO' AND h.HRADEB = '480' AND h.HRAFIN = '1920') OR (h.MOTIF = 'DISPO' AND h.HRADEB = '1200' AND h.HRAFIN = '1920') THEN 1 ELSE 0 END ) AS DISPNUIT, SUM( CASE WHEN (h.MOTIF = 'SPOG12JV' OR h.MOTIF = 'SPOG24JV') THEN 1 ELSE 0 END ) AS POURVUJOUR, SUM( CASE WHEN (h.MOTIF = 'SPOG12NV' OR h.MOTIF = 'SPOG24NV') THEN 1 ELSE 0 END ) AS POURVUNUIT FROM HOPHABS h INNER JOIN HOPEMPL e ON e.MATRI = h.MATRI WHERE (h.MOTIF = 'DISPO' Or h.MOTIF ='SPOASTJ' OR (SUBSTR(h.MOTIF, 1, 4) = 'SPOG' AND SUBSTR(h.MOTIF, 8,1) = 'V')) AND EXTRACT (YEAR FROM h.DAT) = 2012 AND (((h.JOUR BETWEEN 1 and 7) AND h.TYPJOU = 'F' ) OR ((h.JOUR = 6 Or h.JOUR = 7) AND h.TYPJOU != 'F')) GROUP BY h.DAT,ROLLUP (h.MOTIF) ORDER BY h.DAT
Partager