0

我正在使用 MS Access,但在编写查询以获得最终结果时遇到了麻烦。也许有人可以伸出援助之手。

我有项目、任务和子任务表。每个表都有一个“Assignees”的相关表。这意味着可以将项目分配给员工,但可以将子任务分配给不同的员工,然后再将子任务分配给其他员工。

现在,当在屏幕上显示此内容时,我查询已分配给任何项目/任务/子任务的员工。我需要显示该数据,但不需要显示其他数据。因此,例如,如果我只查询的员工已被分配到一个任务,那么应该显示该项目和任务,但没有其他项目/任务/也没有子任务。同样,如果我查询仅分配给子任务的员工,那么我只想查看关联的项目和任务。我想我可以通过一系列查询来完成这个……我想……但是有没有一种巧妙的方法可以用来创建这些数据。

简单的带有一系列连接的选择查询可能会起作用,但它不起作用,因为当员工仅被分配到子任务而不是项目或任务时。

感谢您的帮助!

更新了其他信息:

表结构:

CREATE TABLE [dbo].[Projects](
[ProjectID] [int] IDENTITY(1,1) NOT NULL,
[ProjectName] [varchar](100) NULL,
[ClientID] [int] NULL,

CREATE TABLE [dbo].[PM_ProjectAssignee](
[AssigneeID] [int] IDENTITY(1,1) NOT NULL,
[ProjectID] [int] NULL,
[EmployeeID] [int] NULL,

CREATE TABLE [dbo].[PM_ProjectTasks](
[ProjectTaskID] [int] IDENTITY(1,1) NOT NULL,
[ProjectID] [int] NULL,
[TaskID] [smallint] NULL,

CREATE TABLE [dbo].[PM_TaskAssignee](
[AssigneeID] [int] IDENTITY(1,1) NOT NULL,
[ProjectTaskID] [int] NULL,
[EmployeeID] [int] NULL,

CREATE TABLE [dbo].[PM_ProjectSubTasks](
[ProjectSubTaskID] [int] IDENTITY(1,1) NOT NULL,
[ProjectTaskID] [int] NULL,
[SubTaskDesc] [varchar](255) NULL,

CREATE TABLE [dbo].[PM_SubTaskAssignee](
[AssigneeID] [int] IDENTITY(1,1) NOT NULL,
[ProjectSubTaskID] [int] NULL,
[EmployeeID] [int] NULL,

关于我尝试过的查询......很多。我正在实现一个场景,我最终得到了大约六个不同的查询,所有这些查询都最终形成一个(一些查询是用代码构建的以允许过滤)但是最后一个尝试的是:

SELECT  ProjectID, ProjectName, EmployeeID, ProjectTaskID, EmployeeID, Association, ProjectSubTaskID, EmployeeID
FROM (qrTest3_Project LEFT JOIN qrTest2_Task ON qrTest3_Project.ProjectID = qrTest2_Task.ProjectID) LEFT JOIN qrtest1_SubTask ON qrTest2_Task.ProjectTaskID = qrtest1_SubTask.Association
WHERE (((qrTest3_Project.EmployeeID)=8)) OR (((qrTest2_Task.EmployeeID)=8)) OR (((qrtest1_SubTask.EmployeeID)=8));

上述查询包括其他查询,这些查询只是将每个项目/任务/子任务加入到各自的受理人表中。如果需要,我也可以发布这些。

我希望提供您需要的其他信息?如果没有,很乐意提供更多。谢谢!

4

1 回答 1

1

我想我可能已经想通了……正如我所怀疑的那样,我让它变得比需要的更困难。简单地加入真正的标准给了我我需要并且可以使用的数据。

SELECT PM_ProjectAssignee.ProjectID, PM_ProjectTasks.ProjectTaskID, PM_ProjectSubTasks.ProjectSubTaskID 
FROM (((PM_ProjectAssignee
 LEFT JOIN PM_ProjectTasks
 ON PM_ProjectAssignee.ProjectID = PM_ProjectTasks.ProjectID)
 LEFT JOIN PM_ProjectSubTasks
 ON PM_ProjectTasks.ProjectTaskID = PM_ProjectSubTasks.ProjectTaskID)
 LEFT JOIN PM_TaskAssignee
 ON PM_ProjectTasks.ProjectTaskID = PM_TaskAssignee.ProjectTaskID)
 LEFT JOIN PM_SubTaskAssignee
 ON PM_ProjectSubTasks.ProjectSubTaskID = PM_SubTaskAssignee.ProjectSubTaskID 
WHERE (((PM_ProjectAssignee.EmployeeID)=14))
 OR (((PM_TaskAssignee.EmployeeID)=14))
 OR (((PM_SubTaskAssignee.EmployeeID)=14))
GROUP BY PM_ProjectAssignee.ProjectID, PM_ProjectTasks.ProjectTaskID, PM_ProjectSubTasks.ProjectSubTaskID;
于 2014-12-15T16:28:13.050 回答