我可以找到与我相似的问题和答案,但我似乎无法解释......
我正在尝试为c#winforms应用程序获取一些数据。我希望将此作为我的数据库中的一个视图,我可以使用linqtosql访问。我根本不知道如何去做。我意识到我可以使用循环来构建我想要使用C#的表,但希望单个查询能够更有效地实现相同的功能。
我有三个包含以下字段的表:
WeekTable
周(整数)
用户表
用户(字符串)
开始周(整数)
SubmissionTable
用户(字符串)
周(整数)
状态(字符串)
我想要一个查询,根据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
有人可以帮助我吗?
答案 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
我不是寻找不完整或缺失,而是寻找完整,并排除它们。