我的查询没有按预期工作

时间:2015-10-11 12:26:17

标签: sql-server tsql

SELECT Product.ProductName
      ,SUM(Purchase.Value)              AS TotalPurchase
      ,SUM(Sales.Value)                 AS TotalSales
      ,((TotalPurchase) - (TotalSales)) AS ProductAvailability
FROM Product 
INNER JOIN Purchase ON Product.ProductID = Purchase.ProductID 
INNER JOIN Sales    ON Product.ProductID = Sales.ProductID
GROUP BY Product.ProductName

我有3个表产品 - 销售 - 购买 我想要显示产品名称每个产品的总销售额,每个产品的总购买量 产品以及有多少产品尚未售出

2 个答案:

答案 0 :(得分:1)

SELECT Product.ProductName
      ,SUM(Purchase.Value)                                 AS TotalPurchase
      ,ISNULL(SUM(Sales.Value),0)                          AS TotalSales
      ,(SUM(Purchase.Value)  - ISNULL(SUM(Sales.Value),0)) AS ProductAvailability
FROM Product 
LEFT JOIN Purchase ON Product.ProductID = Purchase.ProductID 
LEFT JOIN Sales    ON Product.ProductID = Sales.ProductID
GROUP BY Product.ProductName

由于您还想显示未售出的产品,因此销售表中不会有这些产品的数据,因此您需要LEFT JOIN,而不是INNER JOIN。

TotalPurchaseTotalSales也可以在计算它们的查询中调用,因此使用子查询来操作这些列或使用表达式本身。

答案 1 :(得分:0)

使用查询播放5小时后,我找到了答案

SELECT  PN.ProductName,TotalPurchase ,TotalSales,TotalPurchase-TotalSales AS  ProductAvailability
FROM
((SELECT SUM(Purchase.Value) AS TotalPurchase,Purchase.ProductID FROM Purchase GROUP BY Purchase.ProductID ) AS TP
INNER JOIN 
(SELECT SUM(Sales.Value) AS TotalSales,Sales.ProductID FROM Sales GROUP BY Sales.ProductID ) AS TS
 ON tp.ProductID=TS.ProductID
 INNER JOIN
(SELECT Product.ProductName,Product.ProductID FROM Product GROUP BY Product.ProductName,ProductID) AS PN ON  PN.ProductID=TS.ProductID
)