2016-08-29 10 views
0

これは以前の質問(Getting an exception with datetime diff)の拡張ですが、今度はtotalbreaktimefloatにしました。これは私の新しいクエリです。クエリを実行すると集計関数の例外が発生します

MERGE Time_Tracker as target using (SELECT USERID, cast(DATEDIFF(second,starttime,endtime)/60.0 as numeric(36,2)) as ColumnWithBreaksCount FROM BreaksTable 
where CONVERT(Date, StartTime) = CONVERT(Date, GETDATE()) GROUP BY USERID) as source ON target.USERID = source.USERID 
WHEN MATCHED THEN UPDATE SET BREAKS = source.ColumnWithBreaksCount; 

今回、このクエリを実行すると、次の例外が発生します。

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

問題:

  1. 私の前の質問で述べたように、私は、日付に基づいてbreakstable.totalbreaktimeの和として私のTime_tracker.breaksを更新したいです。
  2. クエリを実行すると(前のクエリ)、現在の日付のデータではなくすべてのデータが考慮されています。

私のテーブルのデータは以下の通りです。

Time_Tracker

enter image description here

BreaksTable

私が間違っているつもりどこ

enter image description here

は私に教えてください、私はこれをどのように修正することができます。

おかげ

答えて

3

あなたのクエリでこのサブクエリを持っている:

SELECT USERID, 
     cast(DATEDIFF(second, starttime, endtime)/60.0 as numeric(36,2)) as ColumnWithBreaksCount 
FROM BreaksTable 
WHERE CONVERT(Date, StartTime) = CONVERT(Date, GETDATE()) 
GROUP BY USERID; 

は、2列目には、集約された列ではなく、また列はGROUP BY句で表現しています。したがって、エラー。

あなたが実際に二列のSUM()たいと私は推測することができます

MERGE Time_Tracker as target using 
     (SELECT USERID, 
       cast(SUM(DATEDIFF(second, starttime, endtime))/60.0 as numeric(36,2)) as ColumnWithBreaksCount 
     FROM BreaksTable 
     WHERE CONVERT(Date, StartTime) = CONVERT(Date, GETDATE()) 
     GROUP BY USERID 
    ) as source 
     ON target.USERID = source.USERID 
WHEN MATCHED THEN UPDATE SET BREAKS = source.ColumnWithBreaksCount; 
+0

こんにちは友達が、これは素晴らしい働いたが、私は 'WHERE'のような' CONVERTを行うことができないんだ小さな問題があります(Date、BreaksTable.StartTime)= CONVERT(Date、Time_Tracker.Login) '、これを実行すると、 'WHERE'というキーワードの近くに不正な構文があります。 – user3872094

関連する問題