0

可能重复:
我的 SQL 查询需要帮助

好吧,我之前可能也发布了这个,但是我的要求发生了一些变化,所以请帮助我完成这个。

我的数据库结构:

ATTActivity表)

  • Act_ID(PK)
  • Assigned_To_ID (FK, 参考Emp_ID)
  • Project_ID (FK, 参考Project_ID)
  • Product_ID (FK, 参考Product_ID)
  • 状态(可以New, OnHold, Cancel, Closed

产品_桌子

  • Product_ID (PK)
  • 产品名称

项目表

  • Project_ID (PK)
  • 项目名称

Employee_Table

  • Emp_ID (PK)
  • F_名称。

Emp_Product_Project_Mapping

(此表基本上映射了将哪个员工分配到哪个产品和哪个项目。在所有 3 列中都允许重复输入,以映射可以将 1 个员工分配到多个项目或产品)

  • Emp_IDFK(FK 指 Emp_ID PK)
  • Product_IDFK(FK 指 Product_ID PK)
  • Project_IDFK(FK 指 Project_ID PK)

约束

  • In 1 Project --> 多个员工可以工作
  • 1 位员工 --> 可以分配多个活动 ( Act_ID)
  • 在任何给定时间点都Status可以是那些给定值中的任何一个。
  • 在任何给定点,一项活动都可以分配给 1 个产品和 1 个项目。

现在在我的 SQL 查询中,我想做的是负载检查::

活动(由 表示Act_ID)分配给员工,由 表示Assigned_To_ID,对于项目(Project_IDin ATT_Table),对于产品(Product_IDin ATT_table)和特定状态。我需要从我的 SQL 查询中输出 5 个值:

  1. 雇员的名字
  2. 产品名称
  3. 为该产品(在 2 中)分配的总活动数,其中状态为 New 或 InProcess。(在这里,我正在计算与产品(在 2 中)相关的所有活动。无论它被分配给谁。它与员工无关(在 1 中。我想要在我的第 4 部分)。
  4. 现在,我想要员工(1)分配到的活动计数(在我从(3)获得的总计数中)。希望我让自己清楚。第三个是分配给产品的总活动(在 2 中)。在第 4 次,我的第 3 次结果中的活动被分配给第 1 次的员工。
  5. 加载。那将是 = (Result in 3)/(result in 4) * 100 ((Result in 3) 是比 (result in 4) 更大的值,这很明显。)

现在可能有一个条件,一个员工假设 E1 正在开发产品 P1,P2。所以我的表输出将如下所示:

1    2     3    4     5
E1   P1    
E1   P2 

因此,这里 3、4、5 将具有与该产品(P1 或 P2)的活动相对应的值

请帮我解决这个问题。使用 MSaccess 数据库。谢谢..

4

1 回答 1

1

由于您想以两种独立的方式“分组”您的数据,因此您不能使用单个GROUP BY子句来完成。相反,您必须使用子查询计算每个产品的活动总数;在这里,我还使用子查询来计算每个员工在这些产品上的活动,因为我认为这比在父GROUP BY查询中混合一个子查询更容易理解:GROUP BY

SELECT
  Employee_Table.F_Name,
  Product_Table.Product_Name,
  AllActivities.Count,
  EmployeeActivities.Count,
  EmployeeActivities.Count / AllActivities.Count AS Load
FROM
  Employee_Table, Product_Table
  INNER JOIN (
    SELECT Product_ID, COUNT(*) AS Count
    FROM ATT
    GROUP BY Product_ID
  ) AS AllActivities ON
    AllActivities.Product_ID = Product_Table.Product_ID
  INNER JOIN (
    SELECT Assigned_To_ID, Product_ID, COUNT(*) AS Count
    FROM ATT
    GROUP BY Assigned_To_ID, Product_ID
  ) AS EmployeeActivities ON
        EmployeeActivities.Assigned_To_ID = Employee_Table.Emp_ID
    AND EmployeeActivities.Product_ID     = Product_Table.Product_ID
于 2012-04-29T15:16:46.060 回答