2013-09-25 157 views
0

我试图做这样的事情:条件选择在SQL语句

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,所以这方面的资源也是有益的。

回答

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' 

,如果您有任何关于当用户得到decativated日期的任何条目这将做的工作。

在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  
+3

呵呵@'decavitated',不管这意味着,这听起来致命的;) – Khan

+1

抱歉错字!包含LINQ的 –

+2

+1 – Khan

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 
     )