0

各セールとその日付Salesを持つテーブルがあります。IDと呼ばれる別のものがあります。これには、SaleDetail各販売の詳細が含まれています。2 つの日付の間に販売されたすべての商品とその数量のリストを表示したいと考えています。私は使用しています: ArticleQuantity

 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'  

しかし、「集計関数または GROUP BY 句に含まれていないため、句 HAVING の 'Sales.Date' は無効です」と表示されるため、論理エラーがあるようです。どうすればよいですか? ありがとうございました。

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 bySales.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 に答える