2011-10-16 8 views
2

ProductID、Date、...などのSalesテーブルがあるとします。特定の年に販売された製品の数を調べたい場合は、どのようなクエリを使用しますか?特定の年に販売された製品を選択するためのSQL

私のようなものだった:

SELECT YEAR(Date) AS Year, COUNT(ProductID) FROM Sales GROUP BY Year ORDER BY Year; 

をが、それは正しくありません。基本的に私はこのような結果セットをしたい:

| Year | ProductsSold 
| 2000 | 57306 
| 2001 | 39683 
| 2002 | 30693 
| 2003 | 63966 

私はGROUP BYを必要とするが、私はちょうどこの権利を取得する方法を考えることはできません知っています。

答えて

3

この回答は、列名とエイリアスにキーワードを使用したため、SQL Server構文を使用してエスケープされたキーワードを示しています。

おそらくYEAR機能によってグループに意味ではなく、そのYearエイリアスよりもDate列(すなわち、YEAR([Date]))に適用される:

SELECT YEAR([Date]) AS [Year], COUNT(ProductID) AS ProductsSold 
FROM Sales 
GROUP BY YEAR([Date]) 
ORDER BY [Year]; 

あなたがYearエイリアスを使用することはできません理由は、順序ですSELECTステートメントが評価されます。

+0

私にそれを打つ! – Sam

+0

エイリアス列でグループ化できません、右...ありがとう! –

0

SELECT YEAR(日付)AS Year、COUNT(ProductID)FROM Sales GROUP BY YEAR(日付)ORDER BY Year;

1

私はサムとマイケルの回答、

SELECT YEAR([Date]) AS [Year], COUNT(ProductID) AS ProductsSold 
FROM Sales 
GROUP BY YEAR([Date]) 
ORDER BY [Year]; 

を好むが、私は小さな変更を追加したいと思い、私がいたどのように多くの「異なる」製品を取得するために

SELECT YEAR([Date]) AS [Year], COUNT(DISTINCT ProductID) AS ProductsSold 

を使用することをお勧めします販売されている。それ以外の場合は、1つの製品が複数回表示される場合は、複数回カウントされます。そのようなことをしたい場合は、おそらく数量の列があり、多分

SELECT YEAR([Date]) AS [Year], SUM(Quantity) AS ProductsSold 

などの方が良いでしょう。

+0

問題の定義では一意性は指定されていませんが、興味深いジレンマを指摘したので、私は自分の+1を投げます。 –

関連する問題