我正在创建一个时间表应用并拥有以下表格...
tblTimeEntry
:
-entryID (int)
-entryDate (datetime)
-enteredDate (datetime)
-entryUser (int)
-entryJob (int)
-entryTask (int)
-entryWeekNo (int)
tblWagesWeeks
:
-weekID (int)
-weekDay (int)
-date (datetime)
tblWagesWeeks
包含weekID
,这是一个为每周分配一个int的int。 weekDay
是1-7中的int,为每周的每一天分配一个int。已使用相应的tblWagesWeeks
数字和weekDay
数字在weekID
中输入了三年的日期。
tblTimeEntry
用于记录分配给日期的时间条目。
tblTimeEntry.entryWeekNo
匹配tblWagesWeeks.weekID
并且是一个表示周数的int。 tblTimeEntry.entryDate
与tblWagesWeeks.date
匹配,且为datetime
。
因此,对于前端,我会显示一个显示周数的列表视图。用户点击一周,并显示该周的日期。当用户点击一天时,他们可以输入时间条目。
我遇到的问题是当我尝试使用以下查询列出一周的时间条目时...
SELECT
*,
CONVERT(varchar(19),CONVERT(date,date,106),103) AS dateFormatted,
CASE
WHEN entryHalfDay = '1'
THEN 'Half Day'
WHEN entryHalfDay = '0'
THEN ''
END AS [entryHalfDayString],
CASE
WHEN entryFullDay = '1'
THEN 'Full Day'
WHEN entryFullDay = '0'
THEN ''
END AS [entryFullDayString],
CASE
WHEN enteredDate IS NULL
THEN ''
ELSE 'Entry Complete'
END AS dayStatus
FROM
tblWagesWeeks AS a
LEFT JOIN
tblTimeEntry AS b ON a.[date] = b.entryDate
WHERE
(entryUser = '1' OR entryUser IS NULL) AND weekID = '25'
我遇到的问题是,如果我正在搜索的用户(上面查询中的“1”)在特定日期没有时间条目而另一个用户没有时间条目,则列表中不显示空白日期所以用户没有机会输入当天的时间
以下是上述查询的输出,以演示......
weekID weekDay date entryID entryDate enteredDate entryUser entryJob entryTask entryFullDay entryHalfDay entryWeekNo dateFormatted entryHalfDayString entryFullDayString dayStatus
25 1 2015-06-15 23 2015-06-15 2015-07-14 1 5 5 1 0 25 15/06/2015 Full Day Entry Complete
25 2 2015-06-16 NULL NULL NULL NULL NULL NULL NULL NULL NULL 16/06/2015 NULL NULL
25 3 2015-06-17 NULL NULL NULL NULL NULL NULL NULL NULL NULL 17/06/2015 NULL NULL
25 4 2015-06-18 26 2015-06-18 2015-07-14 1 2 2 1 0 25 18/06/2015 Full Day Entry Complete
25 5 2015-06-19 NULL NULL NULL NULL NULL NULL NULL NULL NULL 19/06/2015 NULL NULL
25 7 2015-06-21 NULL NULL NULL NULL NULL NULL NULL NULL NULL 21/06/2015 NULL NULL
如您所见,第6天缺失。
当我使用entryUser = 25搜索同一周时,您可以看到第6天有一个条目......
SELECT *, CONVERT(varchar(19),CONVERT(date,date,106),103) AS dateFormatted,
CASE WHEN entryHalfDay='1' THEN 'Half Day' WHEN entryHalfDay='0' THEN '' END AS [entryHalfDayString],
CASE WHEN entryFullDay='1' THEN 'Full Day' WHEN entryFullDay='0' THEN '' END AS [entryFullDayString],
CASE WHEN enteredDate IS NULL THEN '' ELSE 'Entry Complete' END AS dayStatus
FROM tblWagesWeeks AS a LEFT JOIN tblTimeEntry AS b ON a.[date] = b.entryDate
WHERE (entryUser = '25' OR entryUser IS NULL) AND weekID = '25'
weekID weekDay date entryID entryDate enteredDate entryUser entryJob entryTask entryFullDay entryHalfDay entryWeekNo dateFormatted entryHalfDayString entryFullDayString dayStatus
25 1 2015-06-15 23 2015-06-15 2015-07-14 1 5 5 1 0 25 15/06/2015 Full Day Entry Complete
25 2 2015-06-16 NULL NULL NULL NULL NULL NULL NULL NULL NULL 16/06/2015 NULL NULL
25 3 2015-06-17 NULL NULL NULL NULL NULL NULL NULL NULL NULL 17/06/2015 NULL NULL
25 4 2015-06-18 26 2015-06-18 2015-07-14 1 2 2 1 0 25 18/06/2015 Full Day Entry Complete
25 5 2015-06-19 NULL NULL NULL NULL NULL NULL NULL NULL NULL 19/06/2015 NULL NULL
25 7 2015-06-21 NULL NULL NULL NULL NULL NULL NULL NULL NULL 21/06/2015 NULL NULL
所以我需要知道如何始终在列表中显示所有工作日,空白并填充单个用户和一周的数字。
任何帮助都会受到大力赞赏。
答案 0 :(得分:0)
您需要将连接的用户条件和周表作为主表的条件,如下所示:
SELECT *, CONVERT(varchar(19),CONVERT(date,date,106),103) AS dateFormatted,
CASE WHEN entryHalfDay='1' THEN 'Half Day' WHEN entryHalfDay='0' THEN '' END AS [entryHalfDayString],
CASE WHEN entryFullDay='1' THEN 'Full Day' WHEN entryFullDay='0' THEN '' END AS [entryFullDayString],
CASE WHEN enteredDate IS NULL THEN '' ELSE 'Entry Complete' END AS dayStatus
FROM tblWagesWeeks AS a
LEFT JOIN tblTimeEntry AS b ON a.[date] = b.entryDate AND b.entryUser = 25
WHERE a.weekID = '25'