accesssql:如何检索用户id被分配到多个位置的多个值的总和

yuvru6vn  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(253)

我正在开发一个access数据库,用于将任务分配给人员并跟踪任务状态和工作量。可以将单个用户标识分配给与特定任务关联的多个字段之一。在本例中,任务表具有“techreviewerid”“designerid”“techreviewerworkload”和“designerworkload”字段
我希望一个查询为每个人返回一行,两个摘要列合计分配给他们的所有工作负载。因此,如果我是id1,我希望第3列返回所有任务中“techreviewerid=1”的“techreviewerworkload”的和,第4列返回所有任务中“designerworkload”的和,其中“designerid=1”
我已经成功地编写了两个独立的查询来实现这一点:

  1. SELECT MESPersonnel.MESID, MESPersonnel.PersonnelName,
  2. IIF(SUM(DesignerTask.DesignerWorkload) IS NULL, 0, SUM(DesignerTask.DesignerWorkload)) AS
  3. TotalDesignerWorkload
  4. FROM
  5. (MESPersonnel LEFT OUTER JOIN Task AS DesignerTask ON (MESPersonnel.MESID =
  6. DesignerTask.DesignerID
  7. AND DesignerTask.DueDate < CDATE('2020-07-30') AND DesignerTask.DueDate > CDATE ('2020-05-01')))
  8. WHERE MESPersonnel.PositionID = 1
  9. GROUP BY MESPersonnel.MESID, MESPersonnel.PersonnelName;

此查询提供下表:

  1. MESID PersonnelName TotalDesignerWorkload
  2. 1 John Doe 40
  3. 2 Dohn Joe 20

我可以用“tech reviewer”术语替换“designer”术语的所有示例,从而创建一个几乎相同的查询。
我要找的是这样一张table:

  1. MESID PersonnelName TotalDesignerWorkload TotalReviewerWorkload
  2. 1 John Doe 40 10
  3. 2 Dohn Joe 20 20

我试图通过多个外部连接将这两个结合起来,结果导致了非常不准确的和。我知道如何解决不同表中的项的问题,但是当我使用同一表中的两个项时,我不知道如何解决。在我的查询中是否有某种access支持的条件和?
编辑:样例原始数据

  1. Task Table
  2. TaskID DesignerID TechReviewerID DesignerWorkload TechReviewerWorkload DueDate
  3. 1 1 2 40 20 06-20-2020
  4. 2 2 1 20 10 06-20-2020
  5. MESPersonnel Table
  6. MESID PersonnelName
  7. 1 John Doe
  8. 2 Dohn Joe
i5desfxk

i5desfxk1#

考虑:
查询1:taskunion
将数据重新排列为规范化结构

  1. SELECT TaskID, DesignerID AS UID, PersonnelName, DesignerWorkload AS Data, DueDate, "Design" AS Cat FROM MESPersonnel
  2. INNER JOIN Task ON MESPersonnel.MESID = Task.DesignerID
  3. UNION SELECT TaskID, TechReviewerID, PersonnelName, TechReviewerWorkload, DueDate, "Tech" FROM MESPersonnel
  4. INNER JOIN Task ON MESPersonnel.MESID = Task.TechReviewerID;

查询2:

  1. TRANSFORM Sum(Data) AS SumData
  2. SELECT UID, PersonnelName
  3. FROM TaskUNION
  4. WHERE DueDate BETWEEN #5/1/2020# AND #7/31/2020#
  5. GROUP BY UID, PersonnelName
  6. PIVOT Cat;

另一种方法是对任务表进行两个简单的、经过过滤的聚合查询,然后将这两个查询连接到mespersonnel。以下为一体式陈述:

  1. SELECT MESID, PersonnelName, SumOfDesignerWorkload, SumOfTechReviewerWorkload
  2. FROM (
  3. SELECT DesignerID, Sum(DesignerWorkload) AS SumOfDesignerWorkload
  4. FROM Task WHERE DueDate BETWEEN #5/1/2020# AND #7/31/2020# GROUP BY DesignerID) AS SumDesi
  5. RIGHT JOIN ((
  6. SELECT TechReviewerID, Sum(TechReviewerWorkload) AS SumOfTechReviewerWorkload
  7. FROM Task WHERE DueDate BETWEEN #5/1/2020# AND #7/31/2020# GROUP BY TechReviewerID) AS SumTech
  8. RIGHT JOIN MESPersonnel ON SumTech.TechReviewerID = MESPersonnel.MESID)
  9. ON SumDesi.DesignerID = MESPersonnel.MESID;
展开查看全部

相关问题