0

特定の時間枠内に完了したマイルストーンの割合をほぼチェックすることで構成されるプロジェクト進捗レポートを生成したいと思います。(例: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];
4

2 に答える 2

1

2つの条件を追加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
        )
于 2012-12-17T12:58:44.127 に答える
1

これは、前の回答から借用した結合でも可能です;)

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

編集はいくつかのmsアクセスの問題に対処する必要がありますが、アクセスでそれを正直にテストすることはできません私は最初の参加の周りの()の利点がわかりません

于 2012-12-17T13:04:14.250 に答える