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