Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我的SQL查询需要帮助吗_Sql_Ms Access - Fatal编程技术网

我的SQL查询需要帮助吗

我的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 在任何给定的时间点,状态可以是这些给定值中

嗯,我可能也在早些时候发布了这篇文章,但到目前为止还找不到答案,所以请在这篇文章上帮助我

我的数据库结构:

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上工作。因此,我的表输出将如下所示:

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弄对了。但是今天我想知道我的要求有一点变化,所以我发布了一个新的问题,它有点只与这一个相关。我已将此标记为答案,因为它适用于此问题。我给你的链接谢谢。先生,今天我想知道我的要求有一点变化,所以我发布了一个新的问题,它有点相关,只有这一个。你能帮我做这个吗?谢谢。