这是我的查询:
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子句。
答案 0 :(得分: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
答案 1 :(得分:1)
您使用了明星*
,但没有使用abc_sessions
表中的列。
使用没有任何聚合函数的GROUP BY
对我来说很奇怪。
你想看到什么?
答案 2 :(得分:1)
这是一个理论问题:正如错误所说,你不能选择你没有掌握的东西。 因此,当您使用简单的SELECT / FROM / WHERE查询时,您在FROM表中拥有的所有内容都可以选择。
但是如果你使用GROUP BY,你就会缩小你的观点:你在GROUP BY中没有使用的任何东西都被丢弃了(想想它两次,当你明确要求时从几行中选择数据是没有意义的将这些行分组。)
答案 3 :(得分:0)
您收到此错误的原因是您没有使用sum / average / count / max / min或您的select语句中的任何类似函数。一旦你使用它们中的任何一个,你将不会得到这个错误。例如:
选择前60名TargetedID,MAX(EntryDate)
来自ABC_Sessions(nolock)
其中EntryDate> '06 -22-2012 23:59:59'
GROUP BY TargetedID