我正在使用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));
上述查询包括简单地将每个项目/任务/子任务加入其各自的受让人表的其他查询。如果需要,我也可以发布这些内容。
我希望能提供您需要的其他信息吗?如果没有,很高兴提供更多。 谢谢!
答案 0 :(得分: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;