2015-04-01 42 views
0

我想创建一个比较两组数据的报告。一个是培训表,列出我们已经培训的人员。另一个是列出参与项目的项目表。如何合并2个组合表,然后添加一个比较它们的列?

我想按部门对受训人员和参与者进行分组,以便知道哪些部门在培训后未参加。

我写了下面的两个语句按部门给我看学员和particpants的计数数量:

显示按部门计算的参与者:

SELECT emp.DEPT_MANUAL, COUNT(pt.SSO) AS PARTIC 
FROM PROJECTTEAM pt, EMPLOYEES emp 
WHERE emp.SSO = pt.sso GROUP BY emp.DEPT_MANUAL 
ORDER BY emp.DEPT_MANUAL DESC 

显示按部门计算的学员:

SELECT emp.DEPT_MANUAL, COUNT(train.SSO) AS TRAINED 
FROM TRAININGROSTER train, EMPLOYEES emp 
WHERE emp.SSO = train.sso GROUP BY emp.DEPT_MANUAL 
ORDER BY emp.DEPT_MANUAL DESC 

关于这两个表的一些信息。

两个PROJECTTEAM & TRAININGROSTER都通过SSO链接到EMPLOYEES表。 EMPLOYEES表有一个字段DEPT_MANUAL。 并非TRAININGROSTER中的每个SSO都在PROJECTTEAM中(他们将继续) 并非每个PROJECTTEAM中的SSO在EMPLOYEES表中都有关联的DEPT_MANUAL。

我想结合这两个select语句,然后添加另一列,将计数除以给出%。它应该看起来像这样: enter image description here

如何组合列出的选择,然后添加第4列显示划分参与者的训练?

谢谢!

+0

你关心事件ID吗? – 2015-04-01 15:27:57

+0

不,我只是添加了这些来显示一个人可以在任一表中多次。但我真的只关心他们一次代表 – JaReg 2015-04-01 15:28:45

回答

1

以下是一种可能的方法。你如何做到这一点是由你正在使用的数据库有限,但在这里是如何它可能看起来在甲骨文

SELECT DISTINCT a.DEPT_MANUAL, a.PARTIC_COUNT, a.TRAIN_COUNT, a.TRAIN_COUNT/a.PARTIC_COUNT AS PCT 
FROM (
SELECT emp.DEPT_MANUAL, 
    (SELECT COUNT(pt.SSO), 
    FROM PROJECTTEAM pt, EMPLOYEES emp_partic 
    WHERE emp_partic.SSO = pt.sso 
    AND emp_partic.DEPT_MANUAL = emp.DEPT_MANUAL) as partic_count, 
    (SELECT COUNT(train.SSO) 
    FROM TRAININGROSTER train, EMPLOYEES emp_train 
    WHERE emp_train.SSO = train.sso 
    AND emp_train.DEPT_MANUAL = emp.DEPT_MANUAL) as train_count 
FROM EMPLOYEES emp 
) a 

凡在另一个数据库,例如SQL Anywhere的,它可能不需要伪表(oracle版本中的“a”),如下所示:

SELECT DISTINCT emp.DEPT_MANUAL, 
    (SELECT COUNT(pt.SSO), 
    FROM PROJECTTEAM pt, EMPLOYEES emp_partic 
    WHERE emp_partic.SSO = pt.sso 
    AND emp_partic.DEPT_MANUAL = emp.DEPT_MANUAL) as partic_count, 
    (SELECT COUNT(train.SSO) 
    FROM TRAININGROSTER train, EMPLOYEES emp_train 
    WHERE emp_train.SSO = train.sso 
    AND emp_train.DEPT_MANAUL = emp.DEPT_MANUAL) as train_count, 
    train_count/partic_count AS PCT 
FROM EMPLOYEES emp 
+0

这工作!我做了一些调整,如分开参加训练,但代码的工作正是我需要的。感谢Jim – JaReg 2015-04-01 17:27:20

+0

很高兴为你效劳。我在那里添加了DISTINCT,以便让部门的每个员工重复一次。 – Jim 2015-04-01 22:21:51

相关问题