2012-09-19 111 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