2012-04-29 175 views
0

可能重复:
Need help for my SQL query汇总数据

嗯,我可能还张贴此较早,但我的要求改了一下,所以请大家帮忙我在这一个。

我的数据库结构:

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_Table

  • PRODUCT_ID(PK)
  • PRODUCT_NAME

Project_Table

  • PROJECT_ID(PK)
  • PROJECT_NAME

Employee_Table

  • EMP_ID(PK)
  • F_Name。

Emp_Product_Project_Mapping

(此表基本上映射哪个员工被分配到哪些产品和项目。重复条目被允许在所有的3列,以映射一个1名雇员可以被分配给多个项目或产品)

  • Emp_IDFK(FK参阅EMP_ID PK)
  • Product_IDFK(FK参阅PRODUCT_ID PK)
  • Project_IDFK(FK参阅PROJECT_ID PK)

约束

  • 在1项目 - >多个员工可以工作
  • 1名员工 - >可以分配多个活动(Act_ID
  • 在时间Status任何给定的点可以是任何给定的值。
  • 在任何给定的点上,活动可以分配给1个产品和1个项目。
  • 在我的SQL查询我想要做的

现在是一个负载检查::

的活动(由Act_ID表示)被分配给雇员被Assigned_To_ID表示,项目(Project_IDATT_Table)产品(Product_IDATT_table)和特定状态。我需要输出从我的SQL查询5个值:

  1. 的员工
  2. 产品的名称名称
  3. 分配给该产品(2)所有活动,其中状态为新的或进程内的数(在这里,我计算了与产品相关的所有活动(在2中),无论它被分配给谁,与雇员无关(在1中),我想在我的第4部分中)。
  4. 现在,我想要分配Employee(1)分配给的活动数(在我从(3)得到的总数中)。希望我明确自己。在第三次是分配给产品的总活动(2)。在4th的活动中,我的结果是第三名,分配给第一名员工。
  5. 负载。这将是=(结果3)/(结果4)* 100((结果3)比(结果4)大,这是显而易见的。)

现在可能有一个条件一个员工让我们说E1正在产品P1,P2上工作。所以,我的表输出将是这个样子::

1 2  3 4  5 
E1 P1  
E1 P2 

所以在这里3,4,5将具有该产品(P1或P2),对应于活动值

请帮我在这一个。使用MSaccess数据库。 谢谢..

+0

只是告诉我在哪里发送发票 – 2012-04-29 14:44:58

+0

好吧,这与我以前的帖子有点相关..这是一种编辑过的问题。请参阅链接http://stackoverflow.com/questions/10352750/need-help-for-my-sql-query/10353148#comment13370080_10353148谢谢。 – 2012-04-29 14:50:05

回答

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 
+0

eggyal ..感谢您的回复。我是你的观点。但是它在FROM子句中给了我一个错误。并且需要我在Employee_Table之后加入部分。我正在使用MSACCESS作为我的数据库。 – 2012-04-29 15:31:43

+0

@ user1230183:我不是所有熟悉Access的人 - 你的问题被标记为[tag:mysql](一个完全不同的数据库系统),这就是我在这里结束的。但是,我认为修改后的答案现在可能适用于您? – eggyal 2012-04-29 15:35:54

+0

谢谢..我感谢你的努力。而我的错误,我标记在Mysql中。但它在From子句中仍然给我一个错误。去内部联接旁边的行INNER JOIN Product_Table。再次感谢 – 2012-04-29 15:42:28