繁体   English   中英

SQL语句中的条件选择

[英]Conditional select in SQL Statement

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

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,因此有关该资源也将是有益的。

我相信这将为您提供所需的结果:

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
        )
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    

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM