我正在解决这个SQL问题:
显示任何收费金额和实际金额不同的采购订单。通过显示采购订单号、每个采购订单的POAmount、实际金额(通过将订单中所有项目的价格相加计算得出)以及两者之间的差异来显示这一点。对结果进行排序,首先显示差异最大的结果。
在运行下面的sql语句时,我得到了以下代码:
错误代码-1,SQL状态42903:聚合函数的使用无效。
select
purchaseorder.ponum,
purchaseorder.amount,
sum(poitems.quantity*poitems.unitprice),
purchaseorder.amount-sum(poitems.quantity*poitems.unitprice)
from purchaseorder, poitems
where
purchaseorder.ponum = poitems.ponum
and purchaseorder.amount!=sum(poitems.quantity*poitems.unitprice)
group by
purchaseorder.ponum,
purchaseorder.amount
我想这是因为我在where子句中使用了聚合函数。
我如何解决这个问题?
谢谢,
发布于 2010-11-04 00:44:13
以下是对我起作用的方法。谢谢你们!
select purchaseorder.ponum,
purchaseorder.amount,
sum(poitems.quantity*poitems.unitprice) as actual,
purchaseorder.amount - sum(poitems.quantity*poitems.unitprice) as "diff"
FROM purchaseorder
JOIN poitems ON (purchaseorder.ponum = poitems.ponum)
GROUP BY purchaseorder.ponum, purchaseorder.amount
HAVING purchaseorder.amount != sum(poitems.quantity * poitems.unitprice)
order by "diff" desc
发布于 2010-11-03 23:55:44
试试这个:
select
purchaseorder.ponum,
purchaseorder.amount,
sum(poitems.quantity*poitems.unitprice),
purchaseorder.amount-sum(poitems.quantity*poitems.unitprice)
from purchaseorder, poitems
where
purchaseorder.ponum = poitems.ponum
group by
purchaseorder.ponum,
purchaseorder.amount
having
purchaseorder.amount!=sum(poitems.quantity*poitems.unitprice)
发布于 2010-11-03 23:56:40
您不能在where
子句中包含聚合-这就是having
的用途-更改为
select purchaseorder.ponum,
purchaseorder.amount,
sum(poitems.quantity*poitems.unitprice) as actual,
purchaseorder.amount - sum(poitems.quantity*poitems.unitprice) as diff
from purchaseorder,
poitems
where purchaseorder.ponum = poitems.ponum
group by purchaseorder.ponum,
purchaseorder.diff
having diff != 0
order by ABS(diff) desc
https://stackoverflow.com/questions/4092724
复制相似问题