【发布时间】:2017-09-22 16:08:26
【问题描述】:
我正在尝试在以下代码的 select 语句中添加聚合子查询。
DECLARE @Date1 Date
DECLARE @Date2 Date
SET @Date1 = '2017-01-01'
SET @Date2 = '2017-03-01'
SELECT
p.PracticeName [Practice Name],
dbo.getFormattedName(l.Userid) [User Name],
MAX(EventDate) [Last Activity],
COUNT(*) [Activity Count],
(SELECT COUNT(*)
FROM UserEvent EVT (NOLOCK)
WHERE EVT.EventTypeID = 1
AND EVT.UserID = au.userID
AND EVT.EventDate >= @Date1
AND EVT.EventDate <= DATEADD(DAY, 1, @Date2)
GROUP BY
au.userID) [Login Count]
FROM
dbo.AudLog l (NOLOCK)
JOIN
Appuser au (NOLOCK) ON l.UserID = au.UserID
JOIN
Practice p (NOLOCK) ON au.PracticeID = p.PracticeID
WHERE
l.EnvironmentID = 1
AND EventDate >= @Date1
AND EventDate <= DATEADD(DAY,1,@Date2)
GROUP BY
p.PracticeName,
dbo.getFormattedName(l.Userid)
ORDER BY
p.PracticeName,
dbo.getFormattedName(l.Userid)
我收到以下错误:
选择列表中的“Appuser.UserID”列无效,因为它既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
我不明白为什么该错误适用于我的子查询,因为我没有选择AppUser.UserID,我只是将子查询与父查询对齐作为条件的参考。此外,它确实在子查询中的GROUP BY 语句中。
我引用了this question,但根据解释,我认为我的查询会起作用。
任何帮助表示赞赏。
【问题讨论】:
-
与主题略有偏差,但确实需要阅读的文章...blogs.sqlsentry.com/aaronbertrand/bad-habits-nolock-everywhere
标签: sql-server tsql subquery aggregate-functions