2014-09-02 49 views
0

進行分組下表包含Key和StartTime和EndTime。我希望我的查詢返回,我的密鑰,具有此密鑰的記錄數以及具有相同密鑰的所有記錄的總分鐘數。不幸的是,我不能在組中使用StartTime和EndTime,因爲這會將每行的開始或停止時間分組。按要求分組,甚至認爲我不想按

SELECT sn.Key, 
     COUNT(*) as SessonNoteCount, 
     sum(dbo.fnCalcTime(sn.StartTime, sn.EndTime)) as min 

FROM SessionNote sn 

group by sn.Key, sn.StartTime, sn.EndTime 
order by sn.Key 
+1

爲什麼你不能在沒有'sn.StartTime'和'sn.EndTime'的情況下運行'GROU P BY'條款?在我看來,你可以。然而,就你所知,在那裏你可能會得到令人難以置信的糟糕表現。如果你想使用一個函數抽象你的時間計算並獲得合理的性能,它需要是一個'RETURNS TABLE'函數,它有一個'SELECT'語句,創建'WITH SCHEMABINDING'並且像'Sum((SELECT已經從dbo.fnCalcTime(sn.STartTime,sn.EndTime)))''。這將允許解析器內聯函數體。 – ErikE 2014-09-02 22:51:44

回答

0

你應該把所有的非聚集選定列,而你的情況只是sn.Key組:

group by sn.Key 

順便說一句,恕我直言,group by子句應該是可選的,因爲完全由列選擇的列決定,並且可以通過查詢解析器輕鬆生成,但是該船已經航行...