0

私と同様の質問と回答を見つけることができますが、解釈できるものは何もありません...

ac# winforms アプリケーションのデータを取得しようとしています。これを、linqtosql を使用してアクセスできるデータベースのビューとして使用したいと考えています。どうすればいいのかわかりません。C# を使用して必要なテーブルを作成するためにループを使用できることはわかっていますが、単一のクエリで同じことをより効率的に達成できることを望んでいました。

次のフィールドを持つ 3 つのテーブルがあります。

  1. WeekTable
    週 (整数)

  2. UserTable
    ユーザー (文字列)
    開始週 (整数)

  3. SubmissionTable
    ユーザー (文字列)
    週 (整数)
    ステータス (文字列)

SubmissionTable に対して各ユーザーをチェックし、開始週以降の毎週のエントリを探すクエリが必要です。

そのユーザーをチェックした毎週、送信テーブルにエントリがない場合、または送信テーブルのエントリのステータスが「未完了」の場合、クエリでユーザー名と欠落している週を返す必要があります。私は基本的に、不足しているエントリまたは不完全なエントリをすべてリストしたクエリ結果を求めています。

例:
WeekTable には 5 つのレコードが含まれ、1-5
UserTable には 2 つのレコードが含まれ、開始週が 2 の「User A」と開始週が 5 の「User B」 SubmissionTable には 3 つのレコードが含まれます:
User A、2、Complete
User A、3、未
完了 ユーザー A、5、完了

ユーザー A は第 1 週のエントリが欠落していますが、開始週が 2 であり、第 4 週のエントリも欠落しており、提出した第 3 週のエントリが不完全であるため、無視できます。ユーザー B は 5 週目に開始したため、エントリがあるはずですが、欠落しています。

私が望むクエリ結果は次のようになります:
User A, 3
User A, 4
User B, 5

誰でも私を助けてもらえますか??

4

1 に答える 1

0

2 つのことを行う必要があります - 週とユーザーの組み合わせを構築し、欠損値をチェックします。

select uw.* from 
    (
        select [user], [week]
        from users
            inner join weeks on users.startweek<=weeks.[week]
    ) uw
        left join 
    submissions
        on uw.[user]= submissions.[user]
        and uw.[week] = submissions.[week]
        and submissions.[status]='complete'
where submissions.[user] is null

不完全または欠落を探す代わりに、完全を探してそれらを除外します。

于 2013-09-05T10:39:07.073 に答える