ms sql中的分组依据和聚合

发布于 2024-12-11 13:54:00 字数 575 浏览 0 评论 0原文

dbo.edp_GetNumDaysInMonth() 是用户定义的函数。

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,第 1 行列“a.enddatetime”无效 在选择列表中,因为它不包含在任一聚合中 函数或 GROUP BY 子句。

dbo.edp_GetNumDaysInMonth() is a user defined function.

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)

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

才能让你更想念 2024-12-18 13:54:00

您按 month(a.enddatetime) 进行分组,因此在您的选择中必须使用:

  • month(a.enddatetime)
  • 聚合函数内的字段

您正在使用 < code>a.enddatetime 所以你有一个错误。

在这种情况下,您可能可以使用 min(a.enddatetime) 代替。

You are grouping by month(a.enddatetime) so in your select you have to use:

  • month(a.enddatetime) or
  • a field inside an aggregate function

You are using a.enddatetime so you have an error.

In this case probably you can use min(a.enddatetime) instead.

相思碎 2024-12-18 13:54:00

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 月的数据将
合并到“第一个月”,这可能不是
你想要的。总的来说,我建议避免仅按月分组
由于这些原因,数量。

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

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

Unless you are constraining the data so that it covers only 1 year,
and it will always cover exactly 1 year, you should never just group
by the Month of a date since it only returns a number from 1-12, not
an actual "month". Thus, data for January 2006 and January 2007 will
be consolidated together into "month 1", which is probably not what
you want. Overall, I recommend avoiding grouping only on a month
number for these reasons.

我很OK 2024-12-18 13:54:00

每当您将 group by 与任何字段一起使用时,它都应该具有带有 select 选项的聚合函数。

因此,您可以根据选择字段的要求使用 MAX、MIN 等

Whenever you use group by with any field it should have aggregate function with select option.

So you can use MAX, MIN etc. as per requirement with select field

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文