我早些时候已经发布了这种类型的问题,但现在我需要以不同的方式进行。我有一个表结构:
ATT_Table : Fields : Act_ID, Assigned_To_ID, Status, Product
Act_ID是主键,Assigned_To_ID被引用到Employee_Table Emp_ID。状态可以是新建,正在处理,已关闭或处于保留状态。产品可以是任何XYZ值。
Employee_Table : Fields : Emp_ID, F_Name, Product
此处,Emp_ID是主键。产品与ATT_Table相同并且将包含ATT_Table中的值,每个Assigned_To_ID与它包含的Emp_ID相同。就好像Emp_ID是1而Product是X,然后在ATT_Table中,对于Assigned_To_ID 1,Product值将是X.我知道它是副本,我可以避免这种情况。
现在我想做的是。首先,我想找到每个产品的员工总数。假设此值为A.现在,我想计算按产品分组的特定活动的员工数量,以及状态为新建或正在处理的状态。让我们说恩B.喜欢。如果员工的F_Name C(Emp_ID = 1),D(Emp_ID = 2),E(Emp_ID = 3),F(Emp_ID = 4)属于产品X.那么根据这个我的A是4.现在在ATT_Table Assigned_To_ID是1和3和那里产品相同,即X和状态是1(新)3(在过程中)。对于2和4,它已关闭或暂停。现在我的B根据这个是2.最后A / B会给我第三个值让我们说H.在我的查询表中我想要A,B和H的值。你能告诉我怎么做到这一点。它有点棘手,无法得到这个。请帮忙。谢谢。
答案 0 :(得分:0)
这样的事情应该这样做:
SELECT g.product,
a,
b,
g.a / g.b h
FROM ( SELECT e.product,
COUNT (DISTINCT assigned_to_id) a,
COUNT (
DISTINCT CASE
WHEN status IN ('new', 'in process')
THEN
assigned_to_id
END)
b
FROM Employee_Table e
LEFT OUTER JOIN
ATT_Table a
ON (e.emp_id = a.assigned_to_id)
GROUP BY e.product) g;
如果您不想获得ATT_Table中没有相应记录的产品,您可以删除LEFT OUTER JOIN并使用INNER join