2012-09-19 77 views
3

我有以下SQL:SELECT COUNT外连接和WHERE

SELECT 
    ud.firstname + ' ' + ud.lastname, 
    COUNT(a.createdDate) AS ActivityCount, 
    au.LastActivityDate 
FROM 
    dbo.aspnet_Users au 
    INNER JOIN dbo.UserDetails ud 
    ON au.UserId = ud.AspNetUserId 
    LEFT OUTER JOIN dbo.audit a 
    ON au.LoweredUserName = a.username 
WHERE 
    (
     au.LoweredUserName IN ('u1', 'u2', 'u3') 
    ) 
AND a.createdDate > '2012-09-18' 
GROUP BY ud.firstname + ' ' + ud.lastname, au.LastActivityDate 
ORDER BY au.LastActivityDate DESC 

但是,让我们说,u1u3没有任何活性,因为该2012-09-18 - 那么结果只包含u2

我以为LEFT OUTER JOIN确信,我得到的所有记录aspnet_Users - 但我想这是因为我WHERE条款秒条件过滤另一个表...

什么我需要改变为了让所有指定的用户,然后一零ActivityCount是否存在在预定期间没有数据?

回答

4

,但我想这是由于在秒条件下我的WHERE子句过滤另一个表...

右键,在WHERE子句createdDate的条件从dbo.audit抑制记录。你可以将其移至LEFT OUTER JOIN条件列表来得到想要的结果。

+0

大,有点育人总是好的。完美的作品。 – MartinHN

0
SELECT 
    ud.firstname + ' ' + ud.lastname, 
    sum(case when a.createdDate is null then 0 else 1 end) AS ActivityCount, 
    au.LastActivityDate 
FROM 
    dbo.aspnet_Users au 
    INNER JOIN dbo.UserDetails ud 
    ON au.UserId = ud.AspNetUserId 
    LEFT OUTER JOIN dbo.audit a 
    ON au.LoweredUserName = a.username 
WHERE 
    (au.LoweredUserName IN ('u1', 'u2', 'u3')) 
AND (a.createdDate > '2012-09-18' or a.createdDate is null) 
GROUP BY 
    ud.firstname + ' ' + ud.lastname, 
    au.LastActivityDate 
ORDER BY au.LastActivityDate DESC 
+0

这将产生相同的结果,因为我张贴的初始查询。 – MartinHN