0

私は質問に行き詰まっています。皆さんが私を助けてくれれば幸いです.

次のように、複数の会社のプロジェクト計画を格納するためにテーブル (MS Access) を使用しています。

ID    PROJECT_NAME   COMPANY_NAME   MILESTONE_NAME   MILESTONE_TYPE

私のクエリの目的は、「該当する」ロールアウトの数を返すことです。

ロールアウトは、プロジェクトと会社のユニークな組み合わせです。例:

Project 1 being executed in the Company A
Project 2 being executed in the Company A
Project 1 being executed in the Company B

該当するプロジェクトは、最後のマイルストーンの MILESTONE_TYPE が「DUMMY」とは異なるプロジェクトです。

該当するロールアウトは次のようになります。

ID    PROJECT_NAME   COMPANY_NAME   MILESTONE_NAME           MILESTONE_TYPE
1     Project 3      Company D      6.2 Rollout Completed    Applicable

プロジェクトの最後のマイルストーンを取得するために、次の SQL を使用しています。

SELECT Sheet1.[PROJECT_NAME], MAX(Sheet1.[MILESTONE_NAME])
FROM Sheet1
    INNER JOIN Sheet1 AS Sheet1_1 ON (Sheet1.[PROJECT_NAME] = Sheet1_1.[PROJECT_NAME])
        AND (Sheet1.[MILESTONE_NAME] = Sheet1_1.[MILESTONE_NAME])
GROUP BY Sheet1.[PROJECT_NAME]
ORDER BY Sheet1.[PROJECT_NAME]

サポートが必要なクエリの予想される結果は次のようになります。

PROJECT_NAME  COUNT_OF_APPLICABLE_ROLLOUTS
Project A     5
Project B     6

しかし、私はどのように始めればよいのかまったくわかりません... SQLクエリにすべてを入れる方法を知っている人はいますか?

前もって感謝します。

4

2 に答える 2

0

より大きな「id」は後で意味すると仮定すると、次のクエリは最新の非ダミー行に関する情報を返します。

select p.*
from Sheet1.p join
     (select project_name, company_name, max(id) as maxid
      from Sheet1
      where Milestone_Name <> 'Dummy'
      group by project_name, company_name
     ) pc
     on p.project_name, pc.company_name

(注: これはテストしていないため、構文エラーがある可能性があります。)

于 2013-01-17T14:29:00.687 に答える
0

これを試すことができます:

    SELECT  myTable.*
FROM    (
        SELECT  DISTINCT COMPANY_NAME
        FROM    Sheet1
        ) CN
CROSS APPLY
        (
        SELECT  TOP 1 *
        FROM    Sheet1 myTable2
        WHERE   myTable2.COMPANY_NAME = CN.COMPANY_NAME
        ORDER BY
                MILESTONE_NAME DESC
        ) myTable
于 2013-01-17T14:39:12.847 に答える