2017-06-12 90 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