0

これは私のクエリです:

select top 60 * from ABC_Sessions (nolock)   
where EntryDate > '06-22-2012 23:59:59'
GROUP BY TargetedID

次に、次のエラーが表示されます。

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

4

4 に答える 4

6

クエリ内の*は、テーブル内のすべての列に展開されます。

select top 60 TargetedID, SessionID, ...
from ABC_Sessions (nolock)
where EntryDate > '06-22-2012 23:59:59'
GROUP BY TargetedID 

エラー メッセージが示すようにSessionID、集計関数なしで選択することは無効です (例: MAX)。

これはうまくいきます:

select top 60 TargetedID, MAX(SessionID) AS MaxSessionID
from ABC_Sessions (nolock)
where EntryDate > '06-22-2012 23:59:59'
GROUP BY TargetedID 
于 2012-07-23T14:48:11.783 に答える
1

それは理論の問題です:エラーが言うように、あなたはあなたが自由に使えるものではないものを選択することは許されていません。したがって、単純なSELECT / FROM / WHEREクエリを使用する場合、FROMテーブルにあるすべてのものを選択できます。

ただし、GROUP BYを使用すると、ビューが狭まります。GROUPBYで使用しないものはすべて破棄されます(2回考えてみてください。明示的にこれらの行をグループ化するように要求するときに、複数の行からデータを選択することは意味がありません)。 )。

GROUPBYORDERBYを混同しているのではないでしょうか。

于 2012-07-23T14:53:54.443 に答える
1

スターを使用しましたが、テーブルの*列ごとにグループ化しませんでした。集計関数なしでabc_sessions使用するのは奇妙に思えます。GROUP BY

何をご覧になりたいですか?

于 2012-07-23T14:48:27.763 に答える
0

このエラーが発生する理由は、select ステートメントで sum/average/count/max/min または同様の関数を使用していないためです。それらのいずれかを使用すると、このエラーは発生しません。例 :
ABC_Sessions (nolock) から上位 60 の TargetedID、MAX(EntryDate) を選択します。ここで、EntryDate > '06-22-2012 23:59:59' GROUP BY TargetedID

于 2012-07-23T17:07:52.363 に答える