2016-08-01 9 views
1

私はSQL Serverですることで、グループに問題があるSQL Serverクエリでgroup byを使用するには?

私はこの単純なSQLステートメントがあります。

select * 
from Factors 
group by moshtari_ID 

を、私はこのエラーを取得:

メッセージ8120、レベル16、状態1、 Line 1
列 'Factors.ID'は、集計関数またはGROUP BY句に含まれていないため、選択リストでは無効です。

これによりグループなしに私の結果である:

enter image description here

と、このコマンドによってグループとの誤差である:

enter image description here

私の問題はありますか?

+4

グループ化について学ぶ必要があります。最初にチュートリアルを取ってください –

+0

達成しようとしていることは何ですか?あなたは何を得ようとしていますか? – Mureinik

答えて

7

一般に、GROUPを開始すると、SELECTにリストされているすべての列は、GROUP内の列またはその集約のいずれかでなければなりません。あなたは、データベース内のすべての都市のリストを取得したい、としようとした場合

| ID | Name  | City  | 
| 1 | Foo bar  | San Jose | 
| 2 | Bar foo  | San Jose | 
| 3 | Baz Foo  | Santa Clara | 

:あなたはこのようなテーブルがあるとしましょうそれが失敗するでしょう

SELECT * FROM table GROUP BY City 

...、あなたのためにGROUP BY句にない列(IDと名前)を要求しています。

SELECT City, count(City) as Cnt FROM table GROUP BY City 

...、それはあなたを得るでしょう:あなたは代わりにできた

| City  | Cnt | 
| San Jose | 2 | 
| Santa Clara | 1 | 

を...しかし、あなたのIDまたは名前を取得しないでしょう。例えば、あなたはもっと複雑なことをすることができます。 subselectsまたは自己結合が、基本的にあなたがしようとしていることは、可能ではないと述べた。あなたの問題をさらに細分化してください(データはどのように見えますか?)

幸運を祈る!

1

グループ化すると、グループ化する列のみを選択できます。他の列は集約する必要があります。これは、min(),avg(),count()

のような機能で行うことができます。 group byでは、複数のレコードを一意にするためです。しかし、ユニークではない列はどうですか? DBは、アグリゲーションをどのように表示するかに関するルールを必要とします。

0

max()、avg()、count()などの集計関数をグループ化する必要があります。すべてmoshtari_ID

select moshtari_ID,sum (totalAmount) from Factors group by moshtari_ID; 

出力は

moshtari_ID SUM 
2    120000 
1    200000 
-1

あなたが唯一、グループ句をすることができます適用した場合、

select * 
from Factorys 
Group by ID, date, time, factorNo, trackingNo, totalAmount, createAt, updateAt, bark_ID, moshtari_ID 
-1

を試してみようとなりますため

例えばこのクエリはtotalAmountを合計します選択時にグループ列と集約関数を使用する

テーブル FROM SELECT式1、式2、... expression_n、 aggregate_function(aggregate_expression) [条件]式1、式2、... expression_n [ORDER BY式[ASC BY GROUP |:

構文DESC]];

+0

これは追加要素を提供しません。 – PJProudhon