如何使用Balance列的where子句过滤以下查询中的数据。当我在条件中使用Balance时,我收到错误[where 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;
此外,如果找不到匹配的付款记录,而不是在余额列中显示空值,我需要invoice_items表的总值。
答案 0 :(得分: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;
答案 1 :(得分: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之前,它始终是执行链中的最后一步。