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 ステートメントと一致するすべての結果を取得するクエリが必要ですが、一致しない結果をすべて無視する必要はありません。円の左側と中央が塗りつぶされたベン図のようなものです。私が示した例では、現在アクティブなすべてのユーザーと、アクティブではないが特定の時間内にアクティブだったユーザーが必要です。フレーム (たとえば、1 か月内の任意の時点でアクティブなユーザーの総数が必要な場合)。

私は次のようなことを試しました

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'

ユーザーが切断された日付に関するエントリがある場合、これは仕事をします。

リンクで

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 に答える