2016-04-28 7 views
0

BY集計関数またはGROUPのいずれかに含まれていない照会、私はこのエラーを取得しています:選択は、それが句

Msg 8120, Level 16, State 1, Procedure ReportEmployeesOnLeave, Line 17 Column 'Employee.EmployeeId' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

enter image description here

+0

あなたは 'TotalAbsents'後にカンマを逃さなかったGroup By原因にすべてのフィールドを書きますか? –

+0

@GinoPane:コメントされたコードは心配しないでください。 –

+0

@Gino Paneはその行は既にコメントされています。 –

答えて

0

エラーメッセージについてあなたが理解していませんか?それはかなり自明です。つまり、group byを使用する場合、選択したすべての属性はgroup byまたは集計関数(COUNT()SUM()など)のいずれかである必要があります。

あなたのgroup byあなたはすべてのエラーを持つべきではない修正するのであれば、:

... 
GROUP BY TC.Date 
,   TC.DayName 
,   TC.DayType 
,   TC.ScheduleId 
,   TC.LeaveTaken 
,   TC.Remarks 
,   E.EmployeeId 
,   E.EmployeeNo 
,   E.Name 
,   E.ScheduleId 
,   C.BusinessName 

これはあなたが探している結果を与えるかどうかを、別の問題です。

今後の質問について:コードをテキストではなく画像として追加してください。そうすれば、回答者はすべてを入力するのではなく、単純にコピー・ペーストすることができます。

編集:あなたがgroup byにしたくない場合は、(SQL Serverの2012以上を想定)ウィンドウ関数を使用することができ、あなたの選択した属性のすべて:

SELECT  * -- Everything you need 
,   COUNT(TC.AbsentCalculation) OVER(PARTITION BY E.Name, E.EmployeeId) AS AbsentCount 
,   SUM(TC.AbsentCalculation) OVER(PARTITION BY E.Name, E.EmployeeId) AS TotalAbsents 
FROM   ... 

あなたがでGROUP BYを必要としませんあなたがこれを実装するならば、すべて。

+0

は、テキスト形式で配置しようとしましたが、私はあなたの投稿が正しくフォーマットされていないコードを含むように見えるこの検証エラーを取得していました。 –

+0

実際に私は2つの日付の間に出席記録をフェッチしたいが、私はちょうど私がこれらの2つの日付の間に望ましいすべての行を得ることができないことによってグループのすべての選択を置く場合NameとEmployeeIdでグループ化したい。 –

+0

@QasimSarwar、編集 – HoneyBadger

0

+0

を参照してください実際に私は2つの日付の間に出席記録をフェッチしたいですが、私はちょうど私がこれらの2つの間に希望のすべての行を得ることができないグループですべての選択を置く場合NameとEmployeeIdでグループ化したい日付。 –

+0

Group byは、集計関数を使用せずにselect&from(つまり、フェッチ列)間に書き込むフィールドを "Group By"原因で書き込む必要があるというルールを持っています。 –

関連する問題