我创建了一个查询来获取工资单运行结果-
Query #1-
SELECT
employeenumber,
effective_date,
classificationname,
Sum(currentamount) AS currentamount,
CASE
WHEN earnings LIKE '%Meals 10 Earnings%' THEN NULL
ELSE Sum(hours_value)
END hours,
Avg(rate) Rate,
CASE
WHEN earnings LIKE '%Meals 10 Earnings%'
THEN Sum(hours_value)
ELSE NULL
END UNITS,
job_name,
payroll_action_id
FROM xyz
现在,这个查询的输出如下-
employeenumber effective_date currentamount UNITS job_name element name payroll_action_id
100 2020-07-03 200 1 Supervisor Meals 10 Earnings Results 456
100 2020-05-08 100 2 Supervisor Meals 10 Earnings Results 574
另一个表将包含此员工的工资余额。这将包括相同的currentamount,比如-200100和上面查询中未包含的那些。
Payroll_balance table -
PERSON_NUMBER BALANCE_NAME BALANCE_VALUE EFFECTIVE_DATE payroll_action_id
100 Meals Units 200 2020-07-03 456
100 Meals Units 100 2020-05-08 574
100 Meals Units 350 2020-01-01 578
payroll\u action\u id在这两个表之间是公共的。未包含在查询#1(578)中的payroll#u actionŦid应使用payrollŦu balance query添加
Expected output -
employeenumber effective_date currentamount UNITS job_name element name payroll_action_id
100 2020-07-03 200 1 Supervisor Meals 10 Earnings Results 456
100 2020-05-08 100 2 Supervisor Meals 10 Earnings Results 574
100 2020-01-01 350 Supervisor Meals Units 578
How can this be achieved ?
4条答案
按热度按时间f0brbegy1#
获得预期输出的一种方法是
LEFT JOIN
与NVL
检查每一列。左连接将确保您考虑payroll_balance
table。NVL
将用中的实际值替换空值payroll_balance
table。为了演示,我已经解释了前四列(每种类型一列)。请检查下面的sql并扩展解决方案。然而,我不清楚聚合逻辑与否
GROUP BY
或者WINDOW
原始sql中的子句。3xiyfsfu2#
这是一个假定的查询,在这个查询中,您似乎需要来自payroll\u balance的所有值以及来自xyz表的匹配行。
mv1qrgav3#
只有两个共同的想法:
1通过union all
类似于下面的查询,但实现的细节取决于实际数据
2通过完全外部连接
hpcdzsge4#
假设第二个表是,第一个表是xyz: