0

Balance 列の where 句を使用して、以下のクエリでデータをフィルター処理する方法。where 条件で Balance を使用すると、["where 句" の列 "Balance" が不明です] というエラーが表示されます。

select *,(it.Total - p.Amount) as Balance
from invoices i
left outer join invoice_items it
    on i.ID=it.InvoiceID
left outer join payment p
    on p.InvoiceID=it.InvoiceID 
where Balance!=0;

また、一致する支払いレコードが見つからない場合は、残高列に null 値を表示する代わりに、invoice_items テーブルの合計値が必要です。

4

2 に答える 2

1

where句でエイリアスを使用することはできません。

リライト

where (it.Total - p.Amount) <> 0

そして他の部分のために

  select 
   (case when p.PaymentId IS NULL 
    then it.Total
    else
    (it.Total - p.Amount) 
   end)

また。COALESCEは、次のことを意味します。p.Amountがnullの場合は、0を使用します。それ以外の場合は、p.Amountを使用します。

select it.Total - COALESCE(p.Amount, 0)

ついに

select i.*,(it.Total - COALESCE(p.Amount, 0)) as Balance
from invoices i
left outer join invoice_items it
    on i.ID=it.InvoiceID
left outer join payment p
    on p.InvoiceID=it.InvoiceID 
where it.Total - COALESCE(p.Amount, 0) <> 0;
于 2012-09-18T08:20:34.663 に答える
0

これを試して:

select *,(it.Total - p.Amount) as Balance
from invoices i
left outer join invoice_items it
    on i.ID=it.InvoiceID
left outer join payment p
    on p.InvoiceID=it.InvoiceID 
where (it.Total - p.Amount) <> 0;

WHERE 句でエイリアスを使用することはできません。時系列的に、WHERE は SELECT の前に発生し、SELECT は常に実行チェーンの最後のステップです。

于 2012-09-18T08:21:34.383 に答える