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