好吧,我可能也早些发布了这个,但我的要求有所改变,所以请帮我解决这个问题。
我的数据库结构:
ATT (Activity
表)
Emp_ID
)Project_ID
)Product_ID
)New, OnHold, Cancel, Closed
)Product_Table
Project_Table
Employee_Table
Emp_Product_Project_Mapping
(此表基本上映射了哪个员工被分配到哪个产品和哪个项目。在所有3列中允许重复输入,以映射1个员工可以分配给多个项目或产品)
约束
Act_ID
)Status
可以是任何给定的值。现在在我的SQL查询中我想要做的是加载检查::
分配给员工的活动(由Act_ID
表示)由Assigned_To_ID
表示,用于产品(Project_ID
中的项目ATT_Table
){{1}在Product_ID
)和特定的状态。我需要从我的SQL查询中输出5个值:
现在可能存在这样的情况:员工让E1说正在使用产品P1,P2。所以我的表输出看起来像这样::
ATT_table
所以这里3,4,5将具有与该产品(P1或P2)的活动相对应的值
请帮我解决这个问题。使用MSaccess数据库。 谢谢..
答案 0 :(得分: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