SQL 查询将给定日期列表的员工时间表的状态显示为 "Not Entered"
SQL Query to display status as "Not Entered" for employees' timesheets for agiven list of dates
我一直在网上搜索答案,但没有找到答案。我刚刚创建了一个帐户并且是新来的所以如果 post 搞砸了请原谅我。
我会提到我的查询所需的重要 tables,
我在 MS Access 中有 3 个 table(暂时直到我们迁移到 SQL 服务器):
T_Employee
-> Emp_ID, Emp_name,...
T_Custom_Calendar_Dates
-> 年号, 月号, 周号, Week_Start_Date, Week_End_Date
T_Timesheet_Header
-> Emp_ID, Week_End_Date,...
.
T_Employee
table当然会有员工列表和Emp_ID作为主键
T_Custom_calendar_Dates
table有以下示例数据:
Year_No Month_No WeekNo Week_Start_Date Week_End_Date
---------------------------------------------------------------------
2015 1 1 02/01/2015 08/01/2015
2015 1 2 09/01/2015 15/01/2015
2015 1 3 16/01/2015 22/01/2015
2015 1 4 23/01/2015 29/01/2015
2015 1 5 30/01/2015 05/02/2015
2015 2 1 06/02/2015 12/02/2015
2015 2 2 13/02/2015 19/02/2015
2015 2 3 20/02/2015 26/02/2015
2015 2 4 27/02/2015 05/03/2015
and so on till Month_No reaches 12
T_Timesheet_Header
table 应该有 EMP_ID
和 Week_End_Date
像这样:
Emp_ID Week_End_Date ,other columns
----------------------------------
1 08/01/2015
1 15/01/2015
1 29/01/2015
请注意,我已跳过输入 2015 年 1 月 22 日的记录
所以我正在寻找的查询是显示类似 :
的内容
Week_End_Date Emp_ID Status
08/01/2015 1 Entered
15/01/2015 1 Entered
22/01/2015 1 Not Entered
29/01/2015 1 Entered
08/01/2015 2 Not Entered
15/01/2015 2 Not Entered
22/01/2015 2 Not Entered
29/01/2015 2 Not Entered
T_Custom_Calendar_Dates
table.
中 Week_end_date
列表的其余部分依此类推
我不确定是否可以不创建临时文件 table
我尝试摆弄 SQL 连接但没有成功,希望一些 SQL 大师过来帮助我
我不确定,但试一试
select tccd.Week_End_Date,
tth.Emp_ID,
SWITCH(IsNull(tth.Emp_ID), 'Not Entered',
TRUE, 'Entered') AS Status
from T_Custom_calendar_Dates tccd left join T_Timesheet_Header tth
on tccd.Emp_ID = th.Emp_ID
首先,您需要获得不同 emp_id
和 Week_End_dates
的组合,以便考虑所有组合。您可以使用 CROSS JOIN
SELECT
t1.Week_End_Date,
t2.Emp_ID
FROM
T_Custom_Calendar_Dates As T1,
(
SELECT Emp_ID FROM T_Timesheet_Header GROUP BY Emp_ID
) as T2
您可以将其用作子查询以连接回 T_Timesheet_Header
table 以确定 Week_End_Date
/EmpID
的唯一组合是否存在于 T_Timesheet_Header
SELECT
T3.Week_End_Date,
T3.Emp_ID,
IIF(ISNULL(T4.Emp_ID), "Not Entered", "Entered") AS [Status]
FROM
(
SELECT
t1.Week_End_Date,
t2.Emp_ID
FROM
T_Custom_Calendar_Dates As T1,
(
SELECT Emp_ID FROM T_Timesheet_Header GROUP BY Emp_ID
) as T2
) as T3
LEFT JOIN T_Timesheet_Header as T4 ON
T3.Week_End_DAte = T4.Week_End_Date AND
T3.Emp_ID = T4.Emp_ID
我一直在网上搜索答案,但没有找到答案。我刚刚创建了一个帐户并且是新来的所以如果 post 搞砸了请原谅我。
我会提到我的查询所需的重要 tables,
我在 MS Access 中有 3 个 table(暂时直到我们迁移到 SQL 服务器):
T_Employee
-> Emp_ID, Emp_name,...T_Custom_Calendar_Dates
-> 年号, 月号, 周号, Week_Start_Date, Week_End_DateT_Timesheet_Header
-> Emp_ID, Week_End_Date,...
.
T_Employee
table当然会有员工列表和Emp_ID作为主键T_Custom_calendar_Dates
table有以下示例数据:Year_No Month_No WeekNo Week_Start_Date Week_End_Date --------------------------------------------------------------------- 2015 1 1 02/01/2015 08/01/2015 2015 1 2 09/01/2015 15/01/2015 2015 1 3 16/01/2015 22/01/2015 2015 1 4 23/01/2015 29/01/2015 2015 1 5 30/01/2015 05/02/2015 2015 2 1 06/02/2015 12/02/2015 2015 2 2 13/02/2015 19/02/2015 2015 2 3 20/02/2015 26/02/2015 2015 2 4 27/02/2015 05/03/2015 and so on till Month_No reaches 12
T_Timesheet_Header
table 应该有EMP_ID
和Week_End_Date
像这样:Emp_ID Week_End_Date ,other columns ---------------------------------- 1 08/01/2015 1 15/01/2015 1 29/01/2015
请注意,我已跳过输入 2015 年 1 月 22 日的记录
所以我正在寻找的查询是显示类似 :
的内容Week_End_Date Emp_ID Status
08/01/2015 1 Entered
15/01/2015 1 Entered
22/01/2015 1 Not Entered
29/01/2015 1 Entered
08/01/2015 2 Not Entered
15/01/2015 2 Not Entered
22/01/2015 2 Not Entered
29/01/2015 2 Not Entered
T_Custom_Calendar_Dates
table.
Week_end_date
列表的其余部分依此类推
我不确定是否可以不创建临时文件 table
我尝试摆弄 SQL 连接但没有成功,希望一些 SQL 大师过来帮助我
我不确定,但试一试
select tccd.Week_End_Date,
tth.Emp_ID,
SWITCH(IsNull(tth.Emp_ID), 'Not Entered',
TRUE, 'Entered') AS Status
from T_Custom_calendar_Dates tccd left join T_Timesheet_Header tth
on tccd.Emp_ID = th.Emp_ID
首先,您需要获得不同 emp_id
和 Week_End_dates
的组合,以便考虑所有组合。您可以使用 CROSS JOIN
SELECT
t1.Week_End_Date,
t2.Emp_ID
FROM
T_Custom_Calendar_Dates As T1,
(
SELECT Emp_ID FROM T_Timesheet_Header GROUP BY Emp_ID
) as T2
您可以将其用作子查询以连接回 T_Timesheet_Header
table 以确定 Week_End_Date
/EmpID
的唯一组合是否存在于 T_Timesheet_Header
SELECT
T3.Week_End_Date,
T3.Emp_ID,
IIF(ISNULL(T4.Emp_ID), "Not Entered", "Entered") AS [Status]
FROM
(
SELECT
t1.Week_End_Date,
t2.Emp_ID
FROM
T_Custom_Calendar_Dates As T1,
(
SELECT Emp_ID FROM T_Timesheet_Header GROUP BY Emp_ID
) as T2
) as T3
LEFT JOIN T_Timesheet_Header as T4 ON
T3.Week_End_DAte = T4.Week_End_Date AND
T3.Emp_ID = T4.Emp_ID