SQL stockant une valeur et en utilisant un autre dans la même requête

J'ai une table Patients qui ressemble à ceci:

  PatientName DateOftest Eye L1 L2 L3 L4 L5 ---------------------------------------------------------------- Mike 17-02-2009 L 23 25 40 32 30 Mike 17-02-2009 R 25 30 34 35 24 Bill 08-03-2006 L 20 24 30 24 25 Bill 08-03-2006 R 18 25 27 30 24 

Maintenant, ma requête ci-dessous trouve moyen

 SELECT PatientName, DateOfTest, (MAX(L1) + MAX(L2) + MAX(L3) + MAX(L4) + MAX(L5))/4 as Mean, SQRT(POW(L1 - Mean, 2) + POW(L2 - Mean, 2) + POW(L3 - Mean, 2) + POW(L4 - Mean, 2) + POW(L5 - Mean, 2)) AS Standard Deviation, 'Binocular' Eye FROM Patients GROUP BY PatientName, DateOfTest; 

La requête ci-dessus est fausse parce que je n'ai pas stocké la moyenne .. y at-il un moyen de stocker moyen de find la déviation standard dans mon code .. Je request parce que j'ai très longue requête et plus d'loggings ..

Pour stocker la moyenne et la réutiliser dans votre requête, une option serait d'utiliser une expression de table commune . Vous pouvez joindre le CTE à la table pour utiliser la moyenne calculée plusieurs fois.

J'avoue que je n'ai pas compris la ligne suivante …

 SQRT(POW(L1-Mean,2)+POW(L2-Mean,2)+POW(L3-Mean,2)+POW(L4-Mean,2)+POW(L5-Mean,2)) as Standard Deviation, 'Binocular' Eye 

… mais la requête ci-dessous montre comment intégrer la moyenne calculée dans cette ligne, ce qui pourrait nécessiter un travail supplémentaire.

 --This is the CTE to calculate the mean WITH Mean_CTE AS ( SELECT PatientName, DateOfTest, (MAX(L1) + MAX(L2) + MAX(L3) + MAX(L4) + MAX(L5))/4 AS [Mean] FROM Patients GROUP BY PatientName, DateOfTest ) --This is the original query SELECT Patients.PatientName, Patients.DateOfTest, Mean_CTE.Mean AS Mean, SQRT(POW(L1-Mean_CTE.Mean,2)+POW(L2-Mean_CTE.Mean,2)+POW(L3-Mean_CTE.Mean,2) +POW(L4-Mean_CTE.Mean,2)+POW(L5-Mean_CTE.Mean,2)) as Standard Deviation, 'Binocular' Eye FROM Patients INNER JOIN Mean_CTE --This is where you join the two ON Patients.PatientName = Mean_CTE.PatientName AND Patients.DateOfTest = Mean_CTE.DateOfTest GROUP BY Patients.PatientName, Patients.DateOfTest, Mean_CTE.Mean; 

Qu'en est-il de la possibilité d'append une colonne CALCULATED à la table qui stocke le résultat de la formule ??

C'est un concept plutôt simple, et va sotre la valeur de la formule.

http://msdn.microsoft.com/en-us/library/ms191250(v=sql.105).aspx