Sql 有点复杂的内部联接和求和查询

Sql 有点复杂的内部联接和求和查询,sql,ms-access,count,inner-join,Sql,Ms Access,Count,Inner Join,我有一个问题要问,如果你们能帮助我,我将不胜感激 我们使用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 Pro

我有一个问题要问,如果你们能帮助我,我将不胜感激

我们使用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
适用项目是指其上一个里程碑的里程碑类型不同于虚拟的任何项目

适用的卷展栏应如下所示:

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查询中输入所有内容吗


提前感谢。

假设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
注意:我还没有测试过它,所以它可能有语法错误。

您可以尝试以下方法:

    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

举个例子,你想要的结果是什么?你使用的是什么数据库?Thx,但它不工作!与MS AccessThx gordon一起使用时,交叉应用程序似乎会生成错误,但它不起作用。ID不是决定卷展栏中最新里程碑的字段。因此,我必须编写SQL查询来检索它们。