2013-09-25 3 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 

Так что в целом я хочу запрос, который получает мне все результаты, значение которых соответствует где заявление, не обязательно игнорирование всех этих результатов что нет. Вроде как диаграмма Венна с левой стороной круга и средней частью. В примере, который я показал, я хочу, чтобы все пользователи, которые в настоящее время активны, и пользователи, которые неактивны, но были активны в течение заданного времени (если бы я хотел, чтобы общее число пользователей было активным в любой момент в течение месяца, например).

Я пытался делать такие вещи, как

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

простите за опечатки! –

+2

+1 для включения LINQ – 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 
     ) 
Смежные вопросы