【发布时间】:2020-06-02 15:30:53
【问题描述】:
以下查询用于查找特定部门的员工人数。这工作正常-
SELECT distinct --LVL2_ORG,
division,
district,
department,
Count(DISTINCT person_number)
over (
PARTITION BY department) AS dep_empl_count
FROM flattened_tree,
hr_org_unit_classifications_f houcf,
hr_all_organization_units_f haouf,
hr_organization_units_f_tl hauft,
per_all_assignments_m paam,
per_all_people_f papf
WHERE haouf.organization_id = flattened_tree.department_id
AND haouf.organization_id = houcf.organization_id
AND haouf.organization_id = hauft.organization_id
AND haouf.effective_start_date BETWEEN
houcf.effective_start_date AND houcf.effective_end_date
AND hauft.LANGUAGE = 'US'
AND hauft.effective_start_date = haouf.effective_start_date
AND hauft.effective_end_date = haouf.effective_end_date
AND houcf.classification_code = 'DEPARTMENT'
AND Trunc(SYSDATE) BETWEEN hauft.effective_start_date AND
hauft.effective_end_date
AND hauft.organization_id = paam.organization_id
AND paam.person_id = papf.person_id
AND paam.primary_assignment_flag = 'Y'
AND paam.assignment_type = 'E'
AND paam.assignment_status_type IN ( 'ACTIVE', 'SUSPENDED' )
AND paam.effective_latest_change = 'Y'
AND trunc(sysdate) between paam.effective_start_date and paam.effective_end_date
AND trunc(sysdate) between papf.effective_start_date and papf.effective_end_date
ORDER BY division,district,department
输出看起来像 -
DIVISION DISTRICT DEPARTMENT JAN
CA Division Grande XYZ 0
CA Division Deer Deer Tubing 1
CA Division Deer XYZ Fracturing 0
CA Division Fracturing CAA Fracturing 3
US Division Neuquen Support 101
US Division Neuquen Cementing 3
US Division Corporate Fracturing 190
现在我想在分区和地区级别计算同一查询中的总和。即同一查询中每个地区和每个部门的人数总和(JAN 列)。这可能吗?
输出应该看起来像 -
DIVISION DISTRICT DEPARTMENT JAN SUM(DIVISION) SUM(DISTRICT)
CA Division Grande XYZ 0 4 0
CA Division Deer Deer Tubing 1 4 1
CA Division Deer XYZ Fracturing 0 4 1
CA Division Fracturing CAA Fracturing 3 4 3
US Division Neuquen Support 101 294 104
US Division Neuquen Cementing 3 294 104
US Division Corporate Fracturing 190 294 190
所以从上面的输出 - 部门的总和应该是一个部门(CA部门和美国部门)中所有员工人数的总和 和区的总和应该是鹿区 - 1+0=1 内乌肯区 101+3=104 像这样。
【问题讨论】:
-
您没有采用 ANSI-92 显式 JOIN 语法的任何原因?他们已经存在 28 年了。你现在放弃那个 31 岁的语法已经很久了。
-
我希望你永远不需要在你的公司里做一个
LEFT JOIN!我怀疑 Oracle 不再支持旧的*=语法,就像其他现代 RDBMS 一样。 -
@Larnu 。 . .他们似乎也厌恶
GROUP BY。 . .我认为自从有标准之前就已经在 SQL 中了。 -
@GordonLinoff 和@Larnu - 感谢您的反馈!我将缓慢而稳定地更改语法。我是这个论坛和 SQL 编码的新手。如果我无意中没有使用标准格式,请原谅!
-
很高兴听到这个消息,@SHSH_123。抱歉,我们打断了您的问题,但在 SQL 社区中,不使用显式连接(也不是显式
GROUP BY)通常被视为危险信号。它通常指向更大的设计缺陷或严重缺乏对语言的理解/知识。否则,可能是因为有人在使用非常旧版本的 RDBMS,但我们谈论的是 90 年代初发布的版本;因此,如果您使用的是这样的版本并且没有通知我们,那么任何答案都可能对您毫无用处,因为几十年前的软件将不支持它们。
标签: sql oracle oracle11g oracle-sqldeveloper