2017-06-09 8 views
1

Ich habe zwei Tabellen, Kunden und Rechnungen, ich muss alle Kunden mit ihren verbleibenden Kredit auflisten. Ich versuche, die Summe der Spalte "Rechnungsbetrag" von der Spalte "CreditLimit" abzuziehen, um die verbleibende Gutschrift zu erhalten.SQL Subtrahieren zwei Spalten auf verschiedenen Tabellen

Tables

Das ist meine Abfrage bisher

DECLARE @CreditRemaining INT 

SELECT 
    @CreditRemaining = (c.CreditLimit - SUM(i.Amount)) 
FROM 
    Customer c 
INNER JOIN 
    Invoices i on 
    c.ID = i.customerId 
+1

warum Sie eine Variable haben Sie? – scsimon

+1

Sie ordnen das Ergebnis einer Variablen zu, aber die Variable kann nur * einen * Wert enthalten. Vermutlich gibt Ihre Abfrage mehr Werte zurück. Daher enthält die Variable nur den letzten ausgewählten Wert (da Sie keine "Reihenfolge nach" haben, ist der letzte Datensatz unvorhersehbar). Was ist Deine Absicht? – HoneyBadger

Antwort

4

Verwenden Sie eine abgeleitete Tabelle für den Rechnungsbetrag SUM(), dann JOIN zurück an den Kunden:

DECLARE @CreditRemaining INT 

SELECT @CreditRemaining = (c.CreditLimit - TotalSpent) 
FROM Customer c 
INNER JOIN (SELECT SUM(Amount) TotalSpent, CustomerID 
      FROM Invoices 
      GROUP BY CustomerID) i ON i.CustomerID = c.ID 

Wie andere schon erwähnt, diese geht davon aus, dass Sie Ihre Auswahl auf einen Kunden beschränken.

Für alle Kunden, benutzen Sie einfach eine select:

SELECT C.Name, (c.CreditLimit - TotalSpent) CreditRemaining 
FROM Customer c 
INNER JOIN (SELECT SUM(Amount) TotalSpent, CustomerID 
      FROM Invoices 
      GROUP BY CustomerID) i ON i.CustomerID = c.ID 
GROUP BY C.Name 
+0

Sorry mein Fehler, ich muss alle Kunden mit ihren verbleibenden Kredit, Appologien –

+0

@ F.OLeary NP auflisten, verwenden Sie einfach eine Auswahl, wenn das der Fall ist. Bearbeitete meine Antwort –

+0

Danke Kumpel, ist TotalSpent eine Variable? –

Verwandte Themen