2016-04-27 77 views
-1
select sum(l.coins) - sum(t.coins) as total 
from luxx_getaway_2016_coins l 
join thrive_rewards_redeemed t 
on l.consid = t.guideid 
where l.consid = 24969 and t.harvestyear = 1516 

大家好。我試圖用上面的查詢獲取更新的總數。我遇到的問題是,這些總和總數遠高於它應該是。我不確定我做錯了什麼。我們正在使用Azure SQL數據庫,並且我使用RazorSQL和SSMS 2012以相同的結果運行此查詢。任何幫助表示讚賞。請隨時要求澄清。爲什麼我的減法結果不正確?

+0

如果你只是選擇什麼行返回,沒有總和?例如'select * from luxx_getaway_2016_coins l join lrive_Rewards_redeemed t on l.consid = t.guideid 其中l.consid = 24969和t.harvestyear = 1516' – APH

+1

'l.consid'和't.guideid'是各自唯一的表?如果沒有,當你加入時你會得到重複。 – rdbradshaw

+0

@APH兩個表中所有字段的列表。我現在可以明白爲什麼我得到了我得到的總數。對於一個表中的每個行項目,都會爲正在加入的表創建重複的行項目。因此,如果我在一個表中有10行,而在另一個表中有一行,則具有最少行的行需要產生與另一個表所產生的行數一樣多的行。 – acecabana

回答

0

一個簡單的解決您的問題的重複:

Select 
    (select sum(l.coins) 
    from luxx_getaway_2016_coins l 
    where l.consid = 24969) 

- 
    (select sum(t.coins) 
    from thrive_rewards_redeemed t 
    where t.guideid = 24969 
     and t.harvestyear = 1516) 

對於更一般的情況:

; With A as (select consid, sum(l.coins) as TotA 
    from luxx_getaway_2016_coins l 
    group by consid) 
, B as (select guideid, sum(t.coins) as TotB 
    from thrive_rewards_redeemed t 
    where t.harvestyear = 1516 
    group by guideID) 

Select a.consid, TotA - TotB as Total 
from A 
inner join B 
on a.Consid = b.GuideID 
+0

這適用於此查詢。謝謝。我的下一步是要弄清楚如何應用這個原則,並用所有考慮因素的硬幣進行觀察。 – acecabana

+0

@acecabana - 我編輯了答案,以顯示一種方法來處理一般情況。我現在不在我的主計算機上,所以還沒有對它進行測試。 – APH

+0

任何方式來應​​用完整連接,並沒有顯示非匹配行的空值?我想對兩個表中存在的ids進行減法,但保留表a中的所有記錄以及減法中的更新總計。 – acecabana

相關問題