【发布时间】:2017-02-22 13:16:40
【问题描述】:
我想获取在给定日期范围内存在/不存在的所有用户。
CREATE TABLE [tt](
[Id] [int] IDENTITY(1,1) NOT NULL,
[UserId] [varchar](20) NULL,
[EmpCode] [varchar](50) NULL,
[Name] [varchar](200) NULL,
[WorkDate] [varchar](20) NULL,
[InTime] [varchar](20) NULL,
[OutTime] [varchar](20) NULL,
[TotalTime] [varchar](50) NULL,
)
insert into [tt] values
('106','E2E106','Goutam Kumar','2017-02-21','12:54:54 PM','10:06:42 PM','08:55:00')
,('106','E2E106','Goutam Kumar','2017-02-20','12:49:21 PM','09:26:27 PM','07:53:00')
,('106','E2E106','Goutam Kumar','2017-02-15','12:31:51 PM','09:21:14 PM','08:30:00')
,('106','E2E106','Goutam Kumar','2017-02-13','05:46:06 PM','09:32:17 PM','03:46:00')
,('106','E2E106','Goutam Kumar','2017-02-14','01:02:28 PM','09:32:50 PM','07:39:00')
,('111','E2E111','Mansi Manchanda','2017-02-21','12:42:42 PM','09:09:42 PM','08:07:00')
,('111','E2E111','Mansi Manchanda','2017-02-17','12:09:11 PM','09:40:46 PM','06:36:00')
,('111','E2E111','Mansi Manchanda','2017-02-16','11:56:21 AM','09:20:08 PM','08:07:00')
,('111','E2E111','Mansi Manchanda','2017-02-15','01:07:19 PM','09:57:40 PM','08:30:00')
CREATE TABLE tUserInfo(
[Id] [int] IDENTITY(1,1) NOT NULL,
[UserId] [nvarchar](20) NULL,
[Name] [nvarchar](200) NULL,
[EmpCode] [varchar](200) NULL,
)
INSERT into tUserInfo VALUES
('106','Goutam Kumar','E2E106')
,('111','Mansi Manchanda','E2E111')
,('112','Arvind Kumar Prajapati','E2E112')
,('116','Rahul Garg','E2E116')
我能够获取给定日期的用户在场/缺席状态。 但我的问题是,我想获取在给定日期范围内存在/不存在的所有用户。
我希望数据看起来像这样:
Id UserId Name EmpCode InTime OutTime WorkDate Status
1 106 Goutam Kumar E2E106 2017-02-13 Present
2 111 Mansi Manchanda E2E111 2017-02-14 Absent
3 112 Arvind Kumar E2E112 2017-02-14 Absent
4 116 Rahul Garg E2E116 2017-02-17 Absent
【问题讨论】:
-
您应该将日期存储为
date数据类型。 -
虽然这不能解决您的问题,但您应该注意规范化。您的数据库中有两次员工的姓名 (?),一次在
tUserInfo表中,多次在tt表中。如果任何用户名发生更改,您将必须检查tt中的所有条目并进行更改。否则 - 如果您不将其存储在这里 - 您只需在tUserInfo表中更改一次。
标签: sql sql-server sql-server-2008 sql-server-2012 sql-server-2008-r2