2017-06-09 5 views
1

私は2つのテーブル、得意先と請求書を持っていますが、残りのクレジットをすべての得意先に一覧表示する必要があります。私はCreditLimit列からインボイス金額の合計を差し引いて、残りのクレジットを私に与えようとしていますか?SQL異なるテーブルで2つの列を引く

Tables

これは私のクエリこれまで

DECLARE @CreditRemaining INT 

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

変数を持っていますなぜですか? – scsimon

+1

結果を変数に代入していますが、変数は* 1つの*値しか保持できません。おそらく、クエリはより多くの値を返します。したがって、変数は選択された最後の値のみを保持します(あなたは 'order by 'を持たず、最後のレコードは予測できません)。あなたの意図は何ですか? – HoneyBadger

答えて

4

使用後、請求金額SUM()の派生テーブル、お客様へのバックJOINは次のとおりです。

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 

他の人が述べたように、これを1つの顧客に選択を限定していると仮定しています。すべてのお客様のために

、単に選択を使用します。

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

私の間違い申し訳ありませんが、残っているクレジット、アロケーションを持つすべての顧客をリストアップする必要があります。 –

+0

@ F.OLeary NP、その場合はselectを使用してください。編集した私の答え –

+0

ありがとうの仲間は、TotalSpent変数ですか? –

関連する問題