0

这是我的查询:

select top 60 * from ABC_Sessions (nolock)   
where EntryDate > '06-22-2012 23:59:59'
GROUP BY TargetedID

然后它给了我这个错误:

消息 8120,级别 16,状态 1,行 1 列“BI_Sessions.SessionID”在选择列表中无效,因为它既不包含在聚合函数中,也不包含在 GROUP BY 子句中。

4

4 回答 4

6

查询中的*扩展到表中的所有列。

select top 60 TargetedID, SessionID, ...
from ABC_Sessions (nolock)
where EntryDate > '06-22-2012 23:59:59'
GROUP BY TargetedID 

SessionID正如错误消息所述,选择没有聚合函数(例如)是无效的MAX

这会起作用:

select top 60 TargetedID, MAX(SessionID) AS MaxSessionID
from ABC_Sessions (nolock)
where EntryDate > '06-22-2012 23:59:59'
GROUP BY TargetedID 
于 2012-07-23T14:48:11.783 回答
1

您使用了星号*,但没有按表格中的列分组abc_sessions。在没有任何聚合函数的情况下使用GROUP BY对我来说看起来很奇怪。

你想看见什么?

于 2012-07-23T14:48:27.763 回答
1

这是一个理论上的问题:正如错误所说,你不能选择你没有的东西。因此,当您使用简单的 SELECT / FROM / WHERE 查询时,您的 FROM 表中的所有内容都可以供您选择。

但是,如果您使用 GROUP BY,则您的视野会缩小:您在 GROUP BY 中未使用的任何内容都将被丢弃(三思而后行,当您明确要求对这些行进行分组时,从多行中选择数据是没有意义的)。

也许你混淆了GROUP BYORDER BY

于 2012-07-23T14:53:54.443 回答
0

您收到此错误的原因是您没有在您的 select 语句中使用 sum/average/count/max/min 或任何类似函数。一旦您使用其中任何一个,您将不会收到此错误。例如:
从 ABC_Sessions (nolock) 中选择前 60 个 TargetedID, MAX(EntryDate) where EntryDate > '06-22-2012 23:59:59' GROUP BY TargetedID

于 2012-07-23T17:07:52.363 回答