Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不包括同一列的特定值的SQL查询_Sql_Ms Access - Fatal编程技术网

不包括同一列的特定值的SQL查询

不包括同一列的特定值的SQL查询,sql,ms-access,Sql,Ms Access,我想生成一个项目进度报告,其中包括在给定的时间范围内检查已完成里程碑的百分比。 e、 g:A公司今天有10个到期里程碑,但只有8个标记为已完成,因此进度比计划慢20% 这一部分很简单,而且工作得很好,但是在生成它之前,我有一个决定项目计划是否被批准。批准的项目计划是里程碑1和2=100的计划 下面您可以看到我必须使用的表结构 ID Company Project Milestone Date Completion 170825240 Com

我想生成一个项目进度报告,其中包括在给定的时间范围内检查已完成里程碑的百分比。 e、 g:A公司今天有10个到期里程碑,但只有8个标记为已完成,因此进度比计划慢20%

这一部分很简单,而且工作得很好,但是在生成它之前,我有一个决定项目计划是否被批准。批准的项目计划是里程碑1和2=100的计划

下面您可以看到我必须使用的表结构

ID          Company     Project     Milestone   Date        Completion
170825240   Company A   Project 1   Milestone 1 29.10.12    100
170825311   Company A   Project 1   Milestone 2 29.10.12    0
170825242   Company A   Project 1   Milestone 3 05.11.12    100
170825173   Company A   Project 1   Milestone 4 17.12.12    0
170825104   Company B   Project 1   Milestone 1 29.10.12    100
170825035   Company B   Project 1   Milestone 2 29.10.12    100
170824966   Company B   Project 1   Milestone 3 05.11.12    100
170824897   Company B   Project 1   Milestone 4 17.12.12    0
170824828   Company C   Project 1   Milestone 1 29.10.12    100
170824759   Company C   Project 1   Milestone 2 29.10.12    100
170824690   Company C   Project 1   Milestone 3 05.11.12    0
170824621   Company C   Project 1   Milestone 4 17.12.12    0
在此快照中,项目1已批准用于公司B和C

我面临的问题是如何在单个查询中合并,只过滤已批准的计划。我不愿意手动编写异常,因为我们正在讨论公司和项目的1600个组合

有人知道怎么做吗

谢谢

更新

SELECT S1.[Company], COUNT(S1.[Milestone]) AS ShouldBeMilestones

FROM Sheet1 AS S1

INNER JOIN Sheet1 S2
ON S2.[Company] = S1.[Company]
AND S2.[Project] = S1.[Project]
AND S2.[Milestone] = 'Milestone 1'
AND S2.[%compl#] = 100

INNER JOIN Sheet1 S3
ON S3.[Company] = S1.[Company]
AND S3.[Project] = S1.[Project]
AND S3.[Milestone] = 'Milestone 2'
AND S3.[%compl#] = 100

WHERE ((S1.[Task class] <> 'A') AND (S1.[Task class] <> 'B') AND (S1.[Task class] <> ''))
AND S1.[Milestone] NOT LIKE '0.*' AND S1.[Milestone] NOT LIKE '1.*'
AND S1.[Start] <= Now()

GROUP BY S1.[Company];
添加两个where条件,每个条件检查里程碑的完成情况:

from    Milestones m
where   exists
        (
        select  *
        from    Milestones m1
        where   m1.Company = m.Company
                and m1.Project = m.Project
                and m1.Milestone = 'Milestone 1'
                and m1.Completion = 100
        )
        and exists
        (
        select  *
        from    Milestones m2
        where   m2.Company = m.Company
                and m2.Project = m.Project
                and m2.Milestone = 'Milestone 2'
                and m2.Completion = 100
        )

借用前面的答案,这也是可能的

select m.* 
(from    Milestones m
inner join Milesones as m1 
      on m1.Company = m.Company
      and m1.Project = m.Project
      and m1.Milestone = 'Milestone 1'
      and m1.Completion = 100)
inner join Milestones as m2
        on m2.Company = m.Company
                and m2.Project = m.Project
                and m2.Milestone = 'Milestone 2'
                and m2.Completion = 100

edit应该解决一些ms access问题,但不能在access上测试诚实地说,我不认为第一次加入前后的好处有点离题,但您是否有这样的情况,即milestone2=100,但milestone1Thanks Arvo。很好的观点!我们必须检查两者,因为它们属于不同的利益相关者。实际上,M2就足够了,但我们已经看到一些情况,M2是100,而M1不是-嗨,乌佛斯诺猫。谢谢你的建议。我试图执行脚本查看原始帖子,但在FROM子句中MS Access语法错误。我做错了什么?谢谢MS Access需要在每个连接周围加括号-t1连接t2连接在。。。加入t3于。。。等等,你好,阿沃。我正在努力解决这个问题,仍然收到错误消息。您是否愿意按原样更新该查询?谢谢嗯,自从我在access工作以来,已经有很多年了,有一些好的提示可能我们需要添加as作为别名,并在连接周围更新,至于别名,如果你能正常工作,请随意分享:嗨,Andomar,谢谢你的建议!尝试在MS Access中执行,但即使在25分钟后,我也没有得到任何结果:也许这是因为这个表有60000行,而且结构非常糟糕,对吧?无论如何谢谢你!是否有关于Milestones公司、项目、里程碑的索引?如果没有,请添加它。