2011-11-13 4 views
0

私は何が間違っているのか分かりません。これはNoob関心事:T-SQLグループ句エラーError

SELECT empid, orderdate FROM Sales.Orders 
WHERE custid = 71 
GROUP BY empid, YEAR(orderdate) 

...私が読んでいるT-SQLの基礎ブックからのサンプルクエリで私は次のエラーを取得する:

一体私が間違っているのは何

Msg 8120, Level 16, State 1, Line 1 Column 'Sales.Orders.orderdate' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

...?

答えて

2

ような何かをしようとGROUP BYあなたはempidと受注日(INT)の年をオフに取り組んでいました。しかし、SELECTempidとDATETIMEデータ型を返しています...データ型を無視すると、グループ化されているデータは異なります&が提示されます。

あなたが使用する必要が

SELECT o.empid, 
     YEAR(o.orderdate) 
    FROM Sales.Orders o 
    WHERE o.custid = 71 
GROUP BY o.empid, YEAR(o.orderdate) 

...または:

SELECT o.empid, 
     o.orderdate 
    FROM Sales.Orders o 
    WHERE o.custid = 71 
GROUP BY o.empid, o.orderdate 

代わりに、SQL Serverは、あなたがGROUP BYで列の別名を参照することができます:

SELECT o.empid, 
     YEAR(o.orderdate) AS yr 
    FROM Sales.Orders o 
    WHERE o.custid = 71 
GROUP BY o.empid, yr 
1

これを試してみてください -

SELECT empid, YEAR(orderdate) FROM Sales.Orders 
WHERE custid = 71 
GROUP BY empid, YEAR(orderdate) 

あなたが取得し、なぜあなたはあったエラーを説明する優れたブログの記事がありますここでは、それを取得 - http://weblogs.sqlteam.com/jeffs/archive/2007/07/20/but-why-must-that-column-be-contained-in-an-aggregate.aspx

+0

+ 1:あなたは初めてでした –

+0

@OMGPonies - ありがとう、本当にあなたに良いです。 – ipr101

0

はその

SELECT * FROM Sales.Orders AS o 
WHERE custid = 71 
GROUP BY YEAR(o.orderdate)