2011-10-21 39 views
0

dbo.edp_GetNumDaysInMonth()は、ユーザー定義の関数です。それは集計 関数またはGROUP BY句に含まれていないため、メッセージ8120グループ化および集計(ミリ秒単位)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) 

、レベル16、状態1、行1列「a.enddatetime」は、選択リストに 無効です。

  • month(a.enddatetime)または
  • フィールドの集計関数

の内側にあなたはあなたが持っているので、a.enddatetimeを使用している:あなたはので、あなたの選択にあなたが使用する必要がありmonth(a.enddatetime)によってグループ化されている

答えて

0

エラー。

この場合はおそらく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などを選択フィールドで使用することができます。

関連する問題