2016-04-27 14 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 

Hallo alle. Ich versuche, eine aktualisierte Gesamtsumme mit der obigen Abfrage zu erhalten. Das Problem, das ich habe, ist, dass die Summe dieser Summen weit über dem liegt, was es sein sollte. Ich bin mir nicht sicher, was ich falsch mache. Wir verwenden Azure SQL Database und ich habe RazorSQL und SSMS 2012 verwendet, um diese Abfrage mit identischen Ergebnissen auszuführen. Jede Hilfe wird geschätzt. Bitte zögern Sie nicht um Klärung zu bitten.Warum ist mein Subtraktionsergebnis falsch?

+0

Was wird zurückgegeben, wenn Sie nur die Zeilen auswählen, ohne die Summe? z.B. 'Select * from luxx_getaway_2016_coins l beitreten thrive_rewards_redeemed t auf l.consid = t.guideid wo l.consid = 24969 und t.harvestyear = 1516' – APH

+1

Sind' l.consid' und 't.guideid' einzigartig in ihrer jeweiligen Tabellen? Wenn nicht, erhalten Sie beim Beitritt doppelte Einträge. – rdbradshaw

+0

@APH Eine Liste aller Felder aus beiden Tabellen. Ich kann jetzt sehen, warum ich die Summe bekomme, die ich bekomme. Für jede Werbebuchung in einer Tabelle wird eine doppelte Werbebuchung für die Tabelle erstellt, die verbunden wird. Wenn ich also 10 Zeilen in einer Tabelle und eine Zeile in einer anderen habe, muss die mit den wenigsten Zeilen so viele Zeilen erzeugen, wie die andere Tabelle produziert. – acecabana

Antwort

0

Eine einfache Lösung für Ihre Vervielfältigung Problem:

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) 

Für den allgemeineren Fall:

; 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

Dies funktionierte für diese Abfrage. Vielen Dank. Mein nächster Schritt ist, herauszufinden, wie man dieses Prinzip anwendet und mit Münzen für alle möglichen Dinge eine Ansicht macht. – acecabana

+0

@acecabana - Ich habe die Antwort bearbeitet, um eine Möglichkeit zu zeigen, dies mit dem allgemeinen Fall zu tun. Ich bin gerade nicht an meinem Hauptcomputer, also habe ich es nicht getestet. – APH

+0

Gibt es eine Möglichkeit, einen vollständigen Join anzuwenden und keine NULL-Werte für nicht übereinstimmende Zeilen anzuzeigen? Ich möchte die Subtraktion für IDs machen, die in beiden Tabellen existieren, aber alle Aufzeichnungen von Tabelle a zusammen mit den aktualisierten Summen von der Subtraktion behalten. – acecabana