0

我正在尝试做这样的事情:

SELECT UserID from Users as user
    INNER JOIN UserStatus as userStatus on u.UserID = us.UserID
WHERE
    --user.IsActive = 1
    --if user.IsActive = 0
        --userStatus.DeactivatedDate > @StartDate
        --userStatus.DeactivatedDate < @EndDate

所以总的来说,我想要一个查询,它可以让我得到所有值与 where 语句匹配的结果,而不必忽略所有不匹配的结果。有点像维恩图,圆圈的左侧和中间填充。对于我展示的示例,我希望所有当前处于活动状态的用户以及未处于活动状态但在给定时间内处于活动状态的用户框架(例如,如果我想要一个月内任何时候活跃的用户总数)。

我试过做类似的事情

SELECT UserID from Users as user
    INNER JOIN UserStatus as userStatus on u.UserID = us.UserID
WHERE
    Case user.IsActive = 1

但这显然是不正确的语法。我还需要将其转换为 LINQ,因此这方面的资源也将是有益的。

4

2 回答 2

4

我相信这会给你你正在寻找的结果:

SELECT  UserID 
FROM    Users U
JOIN    UserStatus US 
    ON  U.UserID = US.UserID
WHERE
        U.IsActive = 1
        OR (
                U.IsActive = 0
            AND US.DeactivatedDate > @StartDate
            AND US.DeactivatedDate < @EndDate
        )
于 2013-09-25T14:05:38.743 回答
3
SELECT UserID from Users as user
    INNER JOIN UserStatus as userStatus on u.UserID = us.UserID
WHERE
     user.IsActive = 1 OR us.DeactvatedDate BETWEEN '2012-08-13' AND '2013-08-13'

如果您有任何关于用户被淘汰的日期的条目,这将完成这项工作。

在 LINQ 中

var UID= from u in Users
         from s in UserStatus
         where u.UserID == s.UserID || (s.DeactivatedDate  >= @StartDate &&        
         s.DeactivatedDate <= @endDate)
         select u.userID    
于 2013-09-25T14:05:46.910 回答