2016-10-02 82 views
0

以下查詢這給400值totalDeduction的同時tblDeduction表僅具有1扣除與值的X2 200SQL Server的總和函數給出正確的總和值

select 
    e.EmpID, concat(e.FName, ' ', e.LName) as Name, 
    o.HireDate, o.BasicPay, s.Scale, 
    SUM(a.amount) as totalAllowance, 
    SUM(d.Amount) as totalDeduction 
from 
    tblEmployee e, tblEmpOfficialDetail o, tblScale s, tblAllowance a, tblDeduction d 
where 
    e.EmpID = o.EmpID and 
    o.ScaleID = s.ID and 
    o.ScaleID = a.ScaleID and 
    o.ScaleID = d.ScaleID 
group by 
    e.EmpID, e.FName, e.LName, o.HireDate, o.BasicPay, s.Scale 

當我使用相同的邏輯寫一個單獨的查詢它會返回正確的答案。

select 
    sum(d.amount), o.scale 
from 
    tblDeduction d, tblScale o 
where 
    d.ScaleID = o.ID 
group by 
    o.Scale 

請檢查,因爲分組條件不同,它

感謝

+5

我敢打賭,您的加入條件不是1:1,請刪除羣組以查看發生了什麼。順便說一下,建議使用顯式連接語法,而不是使用92之前的隱式語法。 – HoneyBadger

+0

SO用於提問,不提交代碼供其他人修復 –

+0

@HoneyBadger「連接條件不是1:1」是什麼意思?順便說一句,當我刪除組by子句它給聚合函數錯誤 – Ridzi

回答

0

這兩個查詢是不一樣的。 它可能缺少導致分組不準確的情況。

tblEmployee e 
    |--> tblEmpOfficialDetail o 
      |-->tblDeduction d 
      |-->tblScale  s 
      |-->tblAllowance a 

嘗試下一個查詢:

我從第一查詢表之間的關係就像是猜測。這是相同的,但是從連接表之間的關係確定爲連接條件。

select e.EmpID, concat(e.FName, ' ', e.LName) as Name , 
    o.HireDate, o.BasicPay, s.Scale, SUM(a.amount) as totalAllowance,SUM(d.Amount) as totalDeduction 
    from tblEmployee e 
    join tblEmpOfficialDetail o on e.EmpID=o.EmpID 
    join tblDeduction d on o.ScaleID=d.ScaleID 
    join tblScale s on s.ID=o.ScaleID 
    join tblAllowance a on a.ScaleID = o.ScaleID 
    group by e.EmpID, e.FName, e.LName, o.HireDate, o.BasicPay, s.Scale 
+0

仍給同樣的答案 – Ridzi