2014-12-05 64 views
0

我们有这样的一个表:如何计算在SQL SERVER “VKI”

HospitalCode kcode k 
------------------------------ 
234    COO1 0.5 
234    COO1 0.5 
234    C002 2.4 
234    C003 1.5 
123    C001 0.5 
345    C004 1.0 
567    C001 2.2 
345    C002 3.0 
567    C002 2.4 

我们要计算HospitalCode.vki的VKI计算公式是这样的:

vki=(k*count(kcode))/totalCount(kcode) 

例如,如果我们要计算VKI在该表中,这将是这样的:

VKI为HospitalCode 234:

(count of kcode is about in this table) 

counts kcode of 234: 

C001:2 
C002:1 
C003:1 



vkiFor234=(2*0.5+1*1.5+1*2.4)/4=2.4 

所以我们应该计算每个医院的代码。

我想这SQL Server代码:

SELECT HospitalCode,SUM(COUNT(kcode)*k)/COUNT(kcode) FROM myTable 
GROUP BY HospitalCode 

但是,这心不是工作。

我们该怎么做?

感谢

+0

为什么不起作用?任何错误信息? – Paolo 2014-12-05 10:57:09

+0

你为什么要计算SUM(COUNT(kcode)* k)'的总和?这不符合你自己的vki公式。 – JaMaBing 2014-12-05 11:00:17

+0

这有效,但它给出了错误的结果。 – coder 2014-12-05 11:04:48

回答

1

我没有得到你2.4,即使我计算它在计算器上,而这个代码产生结果,我计算出的值相同。

这里有两种方式,你可以做到这一点

SELECT HospitalCode, SUM(Total) from 
(Select distinct HospitalCode, (COUNT(kcode) OVER(PARTITION BY kcode order by HospitalCode) * k/COUNT(HospitalCode) 
OVER(PARTITION BY HospitalCode order by HospitalCode)) AS Total from myTable) a 
GROUP BY HospitalCode 
ORDER BY HospitalCode 

Select HospitalCode, SUM(kcnt * k)/MAX(tcnt) from 
(Select HospitalCode, kcode, k, Count(*) kcnt, (Select Count(*) from myTable where HospitalCode = a.HospitalCode) tcnt from myTable a 
GROUP BY HospitalCode, kcode, k) a 
GROUP BY HospitalCode 
order by 1 
+0

我已经测试了两个查询的执行计划,最后一个是最有效的。 – 2014-12-05 12:52:14