2011-10-21 35 views
0

dbo.edp_GetNumDaysInMonth()是用戶定義的函數。分組依據和以ms爲單位的聚合sql

select 
    month(a.enddatetime), 
cast(((dbo.edp_GetNumDaysInMonth(a.enddatetime)) * 22.5 - (isnull(sum(a.delayhr),0)/3600.00))/count(a.machine_no) as decimal(11,2)) as MTBF 
from mro_maint a 
    left join mro_machine b on a.machine_no = b.machine_no 
where (b.section = 'TRANSMISSION' OR b.section = 'EATON LINE' OR b.section = 'TOYOTA') 
group by month(a.enddatetime) 

消息8120,級別16,狀態1,因爲它不是在聚合 函數或GROUP BY子句中包含1號線列「a.enddatetime」在選擇列表中無效 。

回答

0

你被month(a.enddatetime)所以在你的選擇組合,你必須使用:

  • month(a.enddatetime)
  • 場的聚集函數

您正在使用a.enddatetime讓你有內一個錯誤。

在這種情況下,您可以使用min(a.enddatetime)代替。

0

http://weblogs.sqlteam.com/jeffs/archive/2007/09/10/group-by-month-sql.aspx

GROUP BY Month(SomeDate) -- or -- GROUP BY DatePart(month, SomeDate) 

除非你是制約數據,以便它涵蓋只有1年, 和它總是會覆蓋正好1年,你永遠不應該只是一個日期的月份組 因爲它只返回1-12的數字,而不是 實際的「月份」。因此,2006年1月和2007年1月的數據將被合併爲「第1個月」,這可能不是您想要的 。總體而言,我建議避免僅在一個月的 號碼上分組,因爲這些原因。

0

無論何時使用group by與任何字段,它都應具有帶select選項的聚合函數。

因此,您可以根據需要使用MAX,MIN等選擇字段