SQL查询 - 查找缺少的信息

时间:2013-09-05 08:50:53

标签: sql sql-server

我可以找到与我相似的问题和答案,但我似乎无法解释......

我正在尝试为c#winforms应用程序获取一些数据。我希望将此作为我的数据库中的一个视图,我可以使用linqtosql访问。我根本不知道如何去做。我意识到我可以使用循环来构建我想要使用C#的表,但希望单个查询能够更有效地实现相同的功能。

我有三个包含以下字段的表:

  1. WeekTable
    周(整数)

  2. 用户表
    用户(字符串)
    开始周(整数)

  3. SubmissionTable
    用户(字符串)
    周(整数)
    状态(字符串)

  4. 我想要一个查询,根据SubmissionTable检查每个用户,查找每周大于或等于其开始周的条目。

    对于为该用户检查的每一周,如果提交表中没有条目,或者提交表中的条目具有“未完成”状态,我希望查询返回用户名和缺失的一周。我基本上是在列出所有缺失或不完整条目的查询结果之后。

    例如:
    WeekTable包含五个记录,1-5个 UserTable包含两个记录为“用户A”,其开始周为2,“用户B”的开始周为5 SubmissionTable包含3条记录:
         用户A,2,完成
         用户A,3,不完整
         用户A,5,完成

    用户A缺少第1周的条目,但可以忽略,因为他们的开始周是2,他们也缺少第4周的条目,他们在第3周提交的条目不完整。用户B在第5周开始,所以应该有一个条目,但它丢失了。

    我想要的查询结果如下:
    用户A,3
    用户A,4
    用户B,5

    有人可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

您需要做两件事 - 构建周和用户的组合,并检查缺失值

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

我不是寻找不完整或缺失,而是寻找完整,并排除它们。