2017-06-12 62 views
1

我在SQL語句中遇到SUM問題。我正在使用MSSQL 2014版本和Management Studio版本12.0.2000.8。SQL SUM邏輯錯誤

我想根據他們的比例貢獻和總收入的60%從表格中獲取每個人的紅利。 每當我用SUM(TotalShares)我得到具有相同的股息(股息總額)的所有股份持有人如

SELECT Names, MemGrpID, GtotalIncome, TotalShares, (GTotalIncome*0.6)* 
    ((TotalShares)/SUM(TotalShares)) AS Dividends FROM tblDivedends GROUP BY 
    Names, MemGrpID, GTotalIncome, TotalShares 

當我做上面的我只能獲得相同的股息每名(總股息)和是錯的。

**Names    MemGrpID  GTotalIncome TotalShares Dividends** 
*Kevin Onyango Otieno 8484   30260.97  8000   18456.582000 
*Paul Anam Otieno  6060   30260.97  5000   18456.582000 
*Simon Kimani   8526   30260.97  1000   18456.582000 

但是,如果只是直接或手動輸入TotalShares的數字(即14000),我會得到正確的分配。

SELECT Names, MemGrpID, GtotalIncome, TotalShares, (GTotalIncome*0.6)* 
    ((TotalShares)/SUM(14000.00)) AS Dividends FROM tblDivedends GROUP BY 
    Names, MemGrpID, GTotalIncome, TotalShares 

Names     MemGrpID GTotalIncome TotalShares Dividends 
*Kevin Onyango Otieno 8484  30260.97  8000   10375.179339 
*Paul Anam Otieno  6060  30260.97  5000   6484.478009 
*Simon Kimani   8526  30260.97  1000   1296.888339 

順便說一句,如果我

SELECT SUM(TotalShares) As TotS from tblDivedends 

我得到正確的結果爲14000.00。

回答

0

將總數直接作爲子查詢添加,如果它是您的GROUP BY生效的相同查詢並且出現錯誤結果。

SELECT Names, MemGrpID, GtotalIncome, TotalShares, (GTotalIncome*0.6)* 
    ((TotalShares)/SELECT SUM(TotalShares) from tblDivedends) AS Dividends FROM tblDivedends GROUP BY 
    Names, MemGrpID, GTotalIncome, TotalShares 
+0

嗨米哈伊,好極了,你的方法也工作得很好。子查詢搖滾!謝謝你們。 Stackoverflow永遠!會樂意讓你高興。這樣做的方式?謝謝 – Simon

0

做的另一種方式是通過partion:

SELECT Names, MemGrpID, GtotalIncome, TotalShares, (GTotalIncome*0.6)* 
    ((TotalShares)/SUM(TotalShares) over(partition by 1)) AS Dividends FROM tblDivedends GROUP BY 
    Names, MemGrpID, GTotalIncome, TotalShares 
+0

太好了,你的方法很好用!萬分感謝,至少我不拔掉我的頭髮!如果存在這樣的詞,是否有「Upvoting」的方法? – Simon

+0

很高興聽到它的幫助,你可以通過點擊上方的箭頭並通過按鈕接受答案來加入。謝謝! – Jayvee