0

我有一个名为的表Sales,其中包含ID每个销售及其日期。我还有另一个,称为SaleDetail,其中包含每次销售的详细信息:theArticle和已Quantity售出。我想显示在两个日期之间售出的所有物品及其数量的列表。我在用着:

 SELECT  
 SaleDetail.Article,  
 SUM(SaleDetail.Quantity) AS Pieces  
 FROM  
 SaleDetail  
 JOIN Sales ON Sales.ID = SaleDetail.ID  
 GROUP BY SaleDetail.Article  
 HAVING Sales.Date BETWEEN '10-01-2013' AND '20-01-2013'  

但它似乎有逻辑错误,因为我在 HAVING 子句中得到“'Sales.Date' 无效,因为它不包含在聚合函数或 GROUP BY 子句中”我应该怎么做?谢谢你。

4

4 回答 4

2

这里的条件应该在 where 子句中,但没有子句。仅适用于整个组,而 WHERE 子句适用于单个行。在这里,您正在寻找具有特定日期的行。

SELECT
SaleDetail.Article,
SUM(SaleDetail.Quantity) AS Pieces
FROM
SaleDetail
JOIN Sales ON Sales.ID = SaleDetail.ID
where Sales.Date BETWEEN '10-01-2013' AND '20-01-2013'
GROUP BY SaleDetail.Article
于 2013-09-04T19:21:47.443 回答
1

HAVING 子句用于尝试过滤聚合时使用。在这种情况下,不会聚合 Sales.Date。所以你可以只使用 WHERE。

SELECT
SaleDetail.Article,
SUM(SaleDetail.Quantity) AS Pieces
FROM
SaleDetail
JOIN Sales ON Sales.ID = SaleDetail.ID
WHERE Sales.Date BETWEEN '10-01-2013' AND '20-01-2013'
GROUP BY SaleDetail.Article
于 2013-09-04T19:23:39.217 回答
0

子句中的变量having需要在group by子句中。而是将Sales.Date表达式放在where子句中。

于 2013-09-04T19:24:02.790 回答
0
declare @SaleDetail table  (ID int, Article varchar(40), Quantity int  )
declare @Sales table  (ID int, Quantity int , [Date] Date )

SELECT
SaleDetail.Article,
SUM(SaleDetail.Quantity) AS Pieces
FROM
@SaleDetail SaleDetail
JOIN @Sales Sales ON Sales.ID = SaleDetail.ID
WHERE Sales.Date BETWEEN '2013-01-10' AND '2013-01-20'
GROUP BY SaleDetail.Article
于 2013-09-04T19:29:09.277 回答