【发布时间】:2011-04-25 00:24:27
【问题描述】:
下面是我正在尝试做的一个示例查询,它完成了工作,但我觉得子查询不是最好的方法。有什么指点吗?
SELECT DISTINCT
u.UserID,
(SELECT COUNT(LoginID) FROM Logins WHERE Success = 1 AND UserID = u.UserID) AS Successful,
(SELECT COUNT(LoginID) FROM Logins WHERE Success = 0 AND UserID = u.UserID) AS Unsuccessful,
(SELECT TOP 1 LoginDate FROM Logins WHERE UserID = u.UserID ORDER BY LoginDate DESC) AS LastLogin
FROM
Users u INNER JOIN
Logins l ON u.UserID = l.UserID
顺便说一句,上面的例子看起来不需要加入,但在真正的解决方案中,我会得到一些其他的列......
【问题讨论】:
-
可以发一下执行计划吗?
-
在我看来,您可以通过使用
sum(if success = 0 then 1 else 0 endif)之类的方式,在一次选择而不是三次选择中完成所有登录查询?
标签: sql sql-server sql-server-2005 optimization