2014-09-02 63 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子句应该是可选的,因为完全由列选择的列决定,并且可以通过查询解析器轻松生成,但是该船已经航行...

相关问题