【发布时间】:2017-10-19 11:27:47
【问题描述】:
我有点 sql nublet 所以希望你能忍受我。
我有 2 个表,我正在执行左外连接(日历和员工)。
第一个表是 2005 年到 2030 年之间的日期列表,第二个表是员工打卡时间列表。
我需要使用这两个表创建一个输出,以显示员工在指定的一周内何时打卡或没有打卡。
这是我在下面使用的代码:
select cal.account_date,
cal.day_value,
Emp_Clock.emp_no,
Emp_Clock.Basic,
Emp_Clock.MWOT,
Emp_Clock.WEOT,
Emp_Clock.Clean
from
(Select work_day as account_date,
Work_Time_Calendar_API.Get_Week_Day(WORK_DAY) as Day_Value from Calendar
where
Calendar_ID = '24/7'
and
work_day between
to_date(CALENDAR_API.Get_First_Week_Day ('2017', '&WEEK_NO', '6' ))
AND to_date(CALENDAR_API.Get_First_Week_Day ('2017', '&WEEK_NO', '6' ))+6) Cal
Left Outer Join
(select company_id,emp_no , account_date,
round(max(decode(wage_code,'MWOT',wage_hours)),2) as MWOT,
round(max(decode(wage_code,'BASIC',wage_hours)),2) as BASIC,
round(max(decode(wage_code,'WEOT',wage_hours)),2) as WEOT,
round(max(decode(wage_code,'CLEAN',wage_hours)),2) as CLEAN,
ifsapp.Work_Time_Calendar_API.Get_Week_Day(account_date) as Day_Value
from Employees where company_ID = 'Redacted'
group by emp_no, account_date,company_ID
order by emp_no) Emp_Clock
on cal.account_date = emp_clock.account_date
order by emp_clock.emp_no, cal.account_date
目前该表仅提取员工工作的日期(current_result.jpg),我认为这是因为我正在加入日期(我可以加入的唯一字段)。
是否有任何可能的方法可以让我重新处理此查询以拉回我所追求的结果 (Desired_Result.jpg),或者两个表中没有足够的信息来以这种方式进行连接。
当前结果:
预期结果:
编辑:子查询结果的附件
编辑 2:
子查询 1 的结果:
Account_Date Day_Value
7/1/2017 00:00:00 Saturday
8/1/2017 00:00:00 Sunday
9/1/2017 00:00:00 Monday
10/1/2017 00:00:00 Tuesday
11/1/2017 00:00:00 Wednesday
等
子查询 2 的结果:
Company_ID Emp_No account_date MWOT BASIC WEOT CLEAN Day_VALUE
Redacted 1 9/1/2017 null 8 null null Monday
Redacted 1 10/1/2017 null 8 null null Tuesday
Redacted 1 11/1/2017 null 8 null null Wednesday
Redacted 2 7/1/2017 null null 8 null Saturday
Redacted 2 9/1/2017 null 8 null null Monday
Redacted 2 10/1/2017 null 8 null null Tuesday
Redacted 3 9/1/2017 2 9.25 null null Monday
Redacted 3 10/1/2017 2 9.25 null null Tuesday
Redacted 3 11/1/2017 2 9.25 null null Wednesday
等
【问题讨论】:
-
如果单独运行:表“日历”上的第一个子查询是否产生所有必需的日期? (左连接应该允许列出所有日期。)
-
是的,我已将子查询的输出添加到主体中。
-
抱歉,刚刚注意到您在第二个子查询中有一个
order by。摆脱它,然后再试一次。除此之外,我看不到任何会阻止预期结果的东西。 -
我已经按照建议在第二个子查询中删除了 order by,但它仍然拉回了相同的结果。感谢您的帮助。
-
从第一个子查询和第二个子查询(分别)提供一些示例数据(作为文本,而不是图像)LEFT JOIN 允许空值你可以从示例数据中省略名称等。这只是我们想要的样本,而不是重载