SQL存储一个值并在同一个查询中使用另一个值

时间:2013-02-12 04:10:56

标签: sql sql-server

我有一张表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;

上面的查询是错误的,因为我没有存储意义..是否有任何方法存储意味着找出我的代码中的标准偏差..我问,因为我有非常冗长的查询和更多的记录..

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

如何将CALCULATED列添加到存储公式结果的表中?

这是一个相当简单的概念,并且会使公式的价值变得渺茫。

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