Bonjour à tous,

j'écris ne procédure stockée qui doit me calculer le rendement de production pour une date donnée, avec éventuellement des paramètres comme un département bien particulier ou une partie de son nom, même chose pour l'article fabriquée ainsi que pour l'opérateur de production.

Je calcul le rendement comme étant le rapport entre la quantité de pièces bonnes produites sur la quantité de pièces bonnes attendues, compte tenu du temps de fabrication déclaré.

J'ai une table rof qui contient les réceptions d'OF, une table sof qui contient les données de suivi d'OF et donc sa gamme (cadence théorique d'une opération), une table art pour les articles, usr pour les utilisateurs, etc...

Voici mon script :

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
SELECT 
		COALESCE(sum(rof_qte_finie),0) AS Bonnes,
		COALESCE(sum(rof_qte_rejetee),0) AS Rebuts,
		COALESCE(sum(rof_duree * sof_cadence),0) AS Attendues,
		COALESCE(sum(rof_qte_finie)/sum(rof_duree * sof_cadence),0)  AS Rendement
		FROM rof
			INNER JOIN ofs  ON rof_of_id = of_id
			INNER JOIN sof ON rof_of_id = sof_of_id AND rof_op = sof_op
			INNER JOIN dept ON sof_departement = dept_id
			INNER JOIN art ON of_article_id = art_id
			INNER JOIN usr ON rof_qui = usr_id AND usr_operateur = 1
		WHERE	rof_date = @jour 
			AND rof_qte_finie >= 0 
			AND rof_qte_rejetee >= 0
			AND (
					(@departement > 0 AND dept_id = @departement)
					OR 
					(COALESCE(@departement,0)<= 0 AND dept_nom LIKE '%' + @filtre_departement + '%')
				)
			AND (
					(@article > 0 AND art_id = @article)
					OR 
					(COALESCE(@article,0)<= 0 AND art_reference LIKE '%' + @filtre_article + '%')
				)
			AND (
					(@operateur > 0 AND usr_id = @operateur)
					OR
					(COALESCE(@operateur,0)<= 0 AND usr_userid LIKE '%' + @filtre_operateur + '%')
				)
J'aimerais me prémunir d'une erreur d'exécution au niveau de la formule du rendement, division par zéro dans le cas où la quantité attendue serait nulle (par exemple si j'interroge sur un jour férié) je voudrais déjà éviter l'erreur d'exécution et aussi retourner un rendement de 100%

Mais comment faire ça directement dans le SELECT ?

Merci à vous