如何获得每个仓库中的产品总量?

时间:2015-10-20 18:30:43

标签: sql sql-server-2008

我有3张桌子

#Products  [Pro_ID] ,[Pro_Name],   
#Stock  [Stock_ID] ,[Pro_ID],[Warehouse_ID] ,[Qty] ,[Status]
Warehouse  [Warehouse_ID] ,[Name]

我正在为我的asp.net项目制作一份报告,该报告显示了我们在每个仓库中拥有的产品总数。我尝试了这个查询,除了Pro_ID写的标题没有数据(0行受影响)之外什么都没有显示。

SELECT Pro_ID from Stock
where Qty > 0
GROUP BY Pro_ID
HAVING COUNT(*) = (SELECT COUNT(*) FROM Warehouse)

这是我最近的股票 Stock table

4 个答案:

答案 0 :(得分:0)

SELECT
    Warehouse.[Warehouse_ID],
    Warehouse.[Name]
    #Products.[Pro_ID],
    #Products.[Pro_Name],
    #Stock.[Stock_ID],
    #Stock.[Qty],
    #Stock.[Status]
FROM
    #Stock
    LEFT OUTER JOIN Warehouse ON #Stock.[Warehouse_ID] = Warehouse.[Warehouse_ID]
    LEFT OUTER JOIN #Products ON #Stock.[Pro_ID] = #Products.[Pro_ID]

请注意,从#Stock开始并外部连接到两个主表,您只能获得#Stock表中具有实际记录的结果。如果您想要所有仓库中的所有产品,您可以选择FROM Warehouse CROSS JOIN #Products来获取产品和仓库的每个组合,然后将其连接到您的#Stock表以获取它们存在的记录,并使用null替换在#Stock表中没有记录的地方插入零。

答案 1 :(得分:0)

试试这个:

SELECT COUNT(*) from Stock s
INNER JOIN Warehouse w ON s.warehouse_id = w.warehouse.id
where s.Qty > 0
GROUP BY Pro_ID

答案 2 :(得分:0)

你的问题有点不清楚。您是否在寻找每个仓库中每个产品的产品数量?如果是这样,此查询应该适合您:

SELECT 
  warehouse_id, pro_id, SUM(qty) AS quantity
FROM #stock
WHERE Qty > 0
GROUP BY 
  warehouse_id, pro_id

答案 3 :(得分:0)

如果您只想获得每个仓库中的内容:

SELECT w.Name, sum(s.Qty)
FROM Stock s 
INNER JOIN Warehouse w 
ON s.Warehouse_ID = w.Warehouse_ID
GROUP BY w.Warehouse_ID,w.Name