これは私のクエリです:
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 句にも含まれていないため、選択リストでは無効です。
これは私のクエリです:
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 句にも含まれていないため、選択リストでは無効です。
クエリ内の*
は、テーブル内のすべての列に展開されます。
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
それは理論の問題です:エラーが言うように、あなたはあなたが自由に使えるものではないものを選択することは許されていません。したがって、単純なSELECT / FROM / WHEREクエリを使用する場合、FROMテーブルにあるすべてのものを選択できます。
ただし、GROUP BYを使用すると、ビューが狭まります。GROUPBYで使用しないものはすべて破棄されます(2回考えてみてください。明示的にこれらの行をグループ化するように要求するときに、複数の行からデータを選択することは意味がありません)。 )。
スターを使用しましたが、テーブルの*
列ごとにグループ化しませんでした。集計関数なしでabc_sessions
使用するのは奇妙に思えます。GROUP BY
何をご覧になりたいですか?
このエラーが発生する理由は、select ステートメントで sum/average/count/max/min または同様の関数を使用していないためです。それらのいずれかを使用すると、このエラーは発生しません。例 :
ABC_Sessions (nolock) から上位 60 の TargetedID、MAX(EntryDate) を選択します。ここで、EntryDate > '06-22-2012 23:59:59' GROUP BY TargetedID