我的SQL查询需要帮助吗
嗯,我可能也在早些时候发布了这篇文章,但到目前为止还找不到答案,所以请在这篇文章上帮助我 我的数据库结构: ATT活动表 行动(k) 已将_分配给_ID FK,请参阅Emp_ID 项目标识FK,请参阅项目标识 产品标识FK,参见产品标识 状态可以是新建、保留、取消、关闭 产品表 产品标识PK 产品名称 项目表 项目ID PK 项目名称 雇员表 Emp_ID PK F_的名字。 约束条件 在1个项目->多个员工可以工作 1员工->可以分配多个活动作为ID 在任何给定的时间点,状态可以是这些给定值中的任何一个 现在在我的SQL查询中,我要做的是负载检查: 对于ATT_表中的项目ID和特定状态,由Act_ID表示的活动分配给员工,由assigned_to_ID表示。我需要从我的SQL查询中输出5个值: 雇员姓名 项目名称 分配给员工的总活动数。 分配给员工的状态为“新建”或“正在处理”的活动数。 负载这将是=C/D*100 C是一个比D大的值,这是显而易见的。 现在可能有一个条件,员工,比如说E1,在项目P1,P2上工作。因此,我的表输出将如下所示:我的SQL查询需要帮助吗,sql,ms-access,Sql,Ms Access,嗯,我可能也在早些时候发布了这篇文章,但到目前为止还找不到答案,所以请在这篇文章上帮助我 我的数据库结构: ATT活动表 行动(k) 已将_分配给_ID FK,请参阅Emp_ID 项目标识FK,请参阅项目标识 产品标识FK,参见产品标识 状态可以是新建、保留、取消、关闭 产品表 产品标识PK 产品名称 项目表 项目ID PK 项目名称 雇员表 Emp_ID PK F_的名字。 约束条件 在1个项目->多个员工可以工作 1员工->可以分配多个活动作为ID 在任何给定的时间点,状态可以是这些给定值中
A B C D E
E1 P1
E1 P2
所以这里C,D,E将具有对应于该项目p1或P2的活动的值
到目前为止,我已经试过了:
SELECT
F_Name AS A,
Project_Name AS B,
Count(Act_ID) AS C,
Count(Act_ID) AS D
FROM
Employee_Table, ATT_Table, Project_Table
WHERE
ATT_table.[Assigned_To_ID] = Employee_Table.[Emp_ID]
AND Project_Table.[Project_ID] = ATT_Table.[Project_ID]
AND Count(Act_ID) IN (SELECT Count(Act_ID)
FROM ATT_Table
WHERE ATT_Table.[Status] <> 'Closed'
AND ATT_Table.[Status] <> 'OnHold')
GROUP BY
F_Name, Project_Name;
我得到了A,B,C。但是当我试图查找状态检查的活动时,我无法执行此查询,因为它会给我一条消息,无法在WHERE子句中写入计数。请帮我做这个。
谢谢 可能是这样。试试看
SELECT
E1.F_Name AS A,
P1.Project_Name AS B,
Count(A1.Act_ID) AS C,
sum( IF( A1.Status IN ( 'Closed', 'OnHold' ), 0, 1 )) as D,
(Count(A1.Act_ID) / sum( IIF( A1.Status IN ( 'Closed', 'OnHold' ), 0, 1 ))) * 100 as E
FROM
ATT_Table A1
JOIN Employee_Table E1
ON A1.Assigned_To_ID = E1.Emp_ID
JOIN Project_Table P1
ON A1.Project_ID = P1.Project_ID
GROUP BY
F_Name, Project_Name;
Select Emp.F_Name As A,
Proj.Project_Name As B,
Count(ATT.Act_ID) As C,
sum( IIF( ATT.Status IN ( 'Closed', 'OnHold' ), 0, 1 )) as D,
(Count(ATT.Act_ID) / sum( IIF( ATT.Status IN ( 'Closed', 'OnHold' ), 0, 1 ))) * 100 as E
From Employee_Table As Emp Inner Join
(Product_Table As Prod Inner Join
(ATT_Table As ATT Inner Join Project_Table As Proj On Proj.Project_ID=ATT.Project_ID)
On Prod.Product_ID=ATT.Product_ID)
On Emp.Emp_ID=ATT.Assigned_To_ID
Group By Emp.F_Name,Proj.Project_Name
您提到了Product_表,但我不明白您的问题是如何涉及到该表的。对于其余部分,我将从子查询中提取列A、B、C和D,并在外部查询中计算E
SELECT
sub.F_Name AS A,
sub.Project_Name AS B,
sub.C,
sub.D,
((sub.C / sub.D) * 100) AS E
FROM
(
SELECT
Emp.F_Name,
Proj.Project_Name,
Count(att.Act_ID) AS C,
Sum(IIf(att.Status IN ('New', 'InProcess'), 1, 0)) AS D
FROM
(ATT_Table AS att
INNER JOIN Employee_Table AS Emp
ON Emp.Emp_ID = att.Assigned_To_ID)
INNER JOIN Project_Table AS Proj
ON Proj.Project_ID = att.Project_ID
GROUP BY
Emp.F_Name,
Proj.Project_Name
) AS sub;
好的,先生,谢谢你的回复。但当我在MSaccess in SQL查询向导中运行它时。我在FROM子句中遇到了一些错误,比如语法错误,它会指向我在FROM子句中编写的JOIN。如果有错误,也会得到未定义的函数。有一件事我注意到你写了S1.状态。。但是S1在哪里?请帮忙。再次感谢。@user1230183,对不起,您没有标记分配,这是一个访问查询。它们的语法略有不同。我从SUMIF改为SUM IIF但S1别名呢?你是说A1吗?哎呀。对不起,我没看到。。是的,两个S1实例都应该是A1好的,先生,我一定会试试的。谢谢如果出现问题,我会发帖的。先生,我把这个1弄对了。但是今天我想知道我的要求有一点变化,所以我发布了一个新的问题,它有点只与这一个相关。我已将此标记为答案,因为它适用于此问题。我给你的链接谢谢。先生,今天我想知道我的要求有一点变化,所以我发布了一个新的问题,它有点相关,只有这一个。你能帮我做这个吗?谢谢。