【发布时间】:2022-01-12 01:28:33
【问题描述】:
我使用下面的查询来获取几列。现在,此查询运行良好,并提供以下输出-
person_number company rule_id overtime_measure_hours Reg_hours Hour_type
10928 xyz y33t 10 10 Bereavement
10928 xyz y33t 10 10 Vacation
10928 xyz y33t 10 10 Paid Personal
3638 abc y33t 8 8
即我得到了所有列的所有正确数据。但是,如果 hour_type 列中没有数据,我不会仅使用 reg_hours 或 overtime_measure_hours 获得任何行。 我想调整下面的查询,以便我计算最终输出中的常规元素,如果它大于 2,那么上面的输出就会出现,如果 它是 1,那么没有 Hour_type 的单行就像第 4 行。我可以将 where 条件放在 count 中还是有其他方法
SELECT person_number,
company,
rule_id,
Sum(CASE
WHEN elements = '1_5X' THEN measure
END) AS overtime_measure_hours,
Sum(CASE
WHEN elements LIKE 'Regular%' THEN measure
END) AS Reg_hours,
hour Hour_type
FROM (SELECT person_number,
company,
rule_id,
elements,
papf.hour
FROM per_all_people_f papf,
co_table co,
rule_table RULE,
time_track elements
WHERE elements.person_id = papf.person_id
AND co.co_id = papf.co_id
AND rule_table.rule_id = elements.rule_id)
UNION
SELECT person_number,
company,
rule_id,
Sum(CASE
WHEN elements = '1_5X' THEN measure
END) AS overtime_measure_hours,
Sum(CASE
WHEN elements LIKE 'Regular%' THEN measure
END) AS Reg_hours,
absences_name Hour_type
FROM (SELECT person_number,
company,
rule_id,
elements,
absences_name
FROM per_all_people_f papf,
co_table co,
rule_table RULE,
time_track elements,
absence_table ABSENCES_name
WHERE elements.person_id = papf.person_id
AND co.co_id = papf.co_id
AND rule_table.rule_id = elements.rule_id
AND ABSENCES_name.person_id = papf.person_id)
【问题讨论】:
-
1992年
JOIN语法被发明;在将近 三个十年之后,您不认为是时候开始使用它了吗?然后你可以开始使用LEFT OUTER JOIN而不是(+),它的好处是它可读并且实际上可以工作((+)在某些情况下它不起作用)。 -
请提供示例数据并描述为什么当前输出不是您想要的。还请最小化您的示例代码,因为与具有所需列的单个表相比,所有表对结果没有特殊影响。
标签: sql oracle oracle-sqldeveloper