是否有任何方法可以让查询返回 8 个字段,但仅按一个字段进行分组,并在另一字段上仅执行一个聚合函数? 我收到一个错误,表明我需要按所有没有聚合函数的字段进行分组。
我需要查找每个月已完成的调查数量,但需要包含其他信息,例如 session 开始时间、 session 状态、 session ID 等。
当我尝试执行此操作时:
SELECT Datepart("m", starttime),
COUNT(sessionid),
sessionstatus,
starttime,
endtime,
surveyid,
surveybook,
userdesk
FROM survey_sessions
GROUP BY Datepart("m", starttime)
我收到错误: “您试图执行一个不包含指定表达式“SessionStatus”作为聚合函数一部分的查询”
我不需要任何其他聚合,并且按剩余字段分组并不能让我获得每月总计。
最佳答案
如果您使用 GROUP BY,则无论如何都必须将所有选定的字段包含在 GROUP BY 中。
如果您将所有内容都包含在 group by 子句中,您可能不会获得预期的结果,因为我假设在对这么多列进行分组时,每一行几乎都是唯一的。
假设您正在使用 SQL Server 可以尝试:
SELECT Datepart("m", starttime),
COUNT(sessionid) OVER(PARTITION BY Datepart("m", starttime)) AS Count,
sessionstatus,
starttime,
endtime,
surveyid,
surveybook,
userdesk
FROM survey_sessions
这将显示您正在查找的所有信息,并在每行上显示当月发生的信息数。
我不能 100% 确定您要实现的目标,因此很难更具体。
编辑:添加替代访问解决方案。
如果您也需要它在访问中工作,您可以尝试以下操作。将 '' 替换为与第一个查询返回的数据类型对应的数字、日期或字符串。这会将行放在查询的底部,其中包含每月的总计。
SELECT Datepart("m", starttime),
0 AS COUNT
sessionstatus,
starttime,
endtime,
surveyid,
surveybook,
userdesk
FROM survey_sessions
UNION ALL
SELECT Datepart("m", starttime),
COUNT(sessionid) as Count,
'',
'',
'',
'',
'',
''
FROM survey_sessions
GROUP BY Datepart("m", starttime)
关于sql - ALTERNATE TO SQL GROUPBY(例如避免在聚合字段上重复),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9525303/