2012-11-19 107 views
1

我需要使用sql server从简单的实体拉数据的帮助。实体数据检索

库存实体有列(pk,fk)product_id, (pk,fk)warehouse_id, inventory_amount, inventory_max_stock, inventory_reorder_point

我需要库存记录作为产品ID列表和以下列的总和:库存量,库存最大库存和库存再订货点。只显示那些结果inventory_amount > 900

SELECT PRODUCT_ID, SUM(INVEN_AMOUNT), SUM(INVEN_MAX_STOCK), 
SUM(INVEN_REORDER_POINT) FROM INVENTORY 
GROUP BY PRODUCT_ID HAVING INVEN_AMOUNT > 900; 

这是我试过的代码。但是我不断收到错误,认为它不是一组表达式。任何帮助,为什么我得到这个错误?

回答

0

HAVING INVEN_AMOUNT > 900是不允许的,因为您没有按INVEN_AMOUNT分组。使用WHERE代替:

SELECT PRODUCT_ID, SUM(INVEN_AMOUNT), SUM(INVEN_MAX_STOCK), SUM(INVEN_REORDER_POINT) 
FROM INVENTORY 
WHERE INVEN_AMOUNT > 900 
GROUP BY PRODUCT_ID; 

如果你想限制这些团体与资金> 900,然后使用SUM(INVEN_AMOUNT)

SELECT PRODUCT_ID, SUM(INVEN_AMOUNT), SUM(INVEN_MAX_STOCK), SUM(INVEN_REORDER_POINT) 
FROM INVENTORY 
GROUP BY PRODUCT_ID 
HAVING SUM(INVEN_AMOUNT) > 900; 
0

INVEN_AMOUNT不validto与having使用,但SUM(INVEN_AMOUNT)是vaild。 Having用于像总和(),AVG()和max()等的聚集函数以其他方式使用的where是更好

SELECT PRODUCT_ID, SUM(INVEN_AMOUNT) as INVEN_AMOUNT, 
SUM(INVEN_MAX_STOCK), SUM(INVEN_REORDER_POINT) FROM INVENTORY 
GROUP BY PRODUCT_ID Having SUM(INVEN_AMOUNT) > 900; 

Check Out here