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 服务器):

.

  1. T_Employeetable当然会有员工列表和Emp_ID作为主键

  2. T_Custom_calendar_Datestable有以下示例数据:

    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
    
  3. T_Timesheet_Header table 应该有 EMP_IDWeek_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_idWeek_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