我有一张表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;
上面的查询是错误的,因为我没有存储意义..是否有任何方法存储意味着找出我的代码中的标准偏差..我问,因为我有非常冗长的查询和更多的记录..
答案 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