1

我有一个Patients看起来像这样的表:

  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

现在我在下面的查询发现意味着

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;

上面的查询是错误的,因为我没有存储平均值..有没有办法存储平均值来找出我的代码中的标准偏差..我问是因为我有很长的查询和更多的记录..

4

2 回答 2

2

要存储平均值并在查询中重用它,一种选择是使用Common Table Expression。您可以将 CTE 连接到表中以多次使用计算的平均值。

我承认不明白下面的行...

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

...但下面的查询显示了如何将计算出的平均值整合到该行中,我认为这可能还需要一些额外的工作。

--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;
于 2013-02-12T04:44:32.610 回答
0

向存储公式结果的表中添加 CALCULATED 列的可能性如何?

这是一个相当简单的概念,并且会确定公式的值。

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

于 2013-02-12T05:59:39.457 回答