Bonjour,

J'ai une procedure stocke qui me permet d'afficher la liste de tout les employee avec leur total d'heure, de repas et de depenses pour des date donnee. J'affiche aussi quand l'employee n'a pas d'heure, de repas oude depenses.

Voici un exemple de resultat:

semaine:21/1/2005 -27/1/2005
Noms heure repas depenses
roger 35 3 1000
laurent 0 0 0
pierre 25 1 400

Cette procedure prend beaucoup de temps quand il y a beaucoup d'employee. J'ai essaye de l'optimise mais sans succes.
Je voudrais essayer de supprimer les 3 sous-expression avec les select.


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
select @StartDate As DateLigne, TPerson.Name, TPerson.idperson,
	(select sum(coalesce(hours,0) - coalesce(lunch,0)) FROM Thereport
	WHERE etridperson=TPerson.idperson AND etridproject=TUserProject.etridproject AND DateDIFF(day, @StartDate, datereport) >= 0 AND DateDIFF(day, datereport, @endDate) >= 0 ) As hours,
 
	(select sum(coalesce(nonbillable,0)) FROM Thereport
	WHERE etridperson=TPerson.idperson AND etridproject=TUserProject.etridproject AND DateDIFF(day, @StartDate, datereport) >= 0 AND DateDIFF(day, datereport, @endDate) >= 0 ) As nonbillable,
 
	(select sum((coalesce(miles,0)*3)+ coalesce(perdiem,0)+coalesce(supplies,0)+coalesce(airfare,0)+ coalesce( gas,0) + coalesce(autorental,0)+ coalesce(other,0) ) FROM Thereport
 
	WHERE etridperson=TPerson.idperson AND etridproject=TUserProject.etridproject AND DateDIFF(day, @StartDate, datereport) >= 0 AND DateDIFF(day, datereport, @endDate) >= 0 )  As Expenses
FROM TUserProject, TPerson 
 
WHERE TUserProject.etridperson=TPerson.idperson AND etridproject = @project AND [type]=1and active=isnull(@active,active)
 
order by Name

Merci de votre aide