如何组合2个组合表,然后添加一个比较它们的列?

时间:2015-04-01 15:20:31

标签: sql oracle

我正在尝试创建一个比较两组数据的报告。一个是列出我们培训对象的培训表。另一个是列出参与项目的项目表。

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

我写了以下两个陈述,向我展示按部门划分的受训人数和参与者人数:

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

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列显示除以参与者训练的?

谢谢!

1 个答案:

答案 0 :(得分:1)

这是一种可行的方法。你如何做到这一点受到你正在使用的数据库的限制,但是它的外观如何 Oracle

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