【发布时间】:2017-03-06 19:22:55
【问题描述】:
我从我的 SQL 查询中返回了一组记录,其中我获取了员工姓名以及他当月休假的开始和结束日期。我的问题是我得到了同一员工的两条记录,但休假日期不同。现在我想要该员工休假时的所有日期(应该结合他的休假数据)。
我的 SQL 查询是:
SELECT distinct emp.emp_name,
NULL as start_date,
NULL as end_date
FROM employee_details emp
WHERE emp.group_name = 'A' and
Emp_Id not in (SELECT distinct emp.Emp_Id
FROM employee_details emp, offshore_leave_calendar olc
WHERE emp.emp_id = olc.emp_id AND
emp.group_name = 'A' and
datepart(mm,olc.start_date) = datepart(mm, getdate()))
union
SELECT distinct emp.emp_name,
olc.Start_Date,
olc.End_Date
FROM employee_details emp, offshore_leave_calendar olc
WHERE emp.emp_id = olc.emp_id AND
emp.group_name = 'A' and
datepart(mm, olc.start_date) = datepart(mm,getdate())
我上面查询的输出是:
Emp_Name start_date end_date
John
Sophia
Olivia
Davis 3/20/2017 12:00:00 AM 3/24/2017 12:00:00 AM
Clark 3/21/2017 12:00:00 AM 3/24/2017 12:00:00 AM
Paul
Thomas 3/21/2016 12:00:00 AM 3/29/2016 12:00:00 AM
Thomas 3/6/2017 12:00:00 AM 3/10/2017 12:00:00 AM
在上面的输出中,Thomas 在本月两次休假。所以我想要托马斯在 C# 列表中休假时的所有日期。输出日期应为:
3/06/2016
3/07/2016
3/08/2016
3/09/2016
3/10/2016
3/21/2016
3/22/2016
3/23/2016
3/24/2016
3/25/2016
3/26/2016
3/27/2016
3/28/2016
3/29/2016
谁能帮我解决这个问题?
我的列表如下:
List<LeaveData> leaveList = new List<LeaveData>();
其中 LeaveData 类有这三个定义:
public string Emp_Name { get; set; }
public DateTime? start_date { get; set; }
public DateTime? end_date { get; set; }
我想在每月的每个日期分配一名员工,而不应分配休假的员工。所以我循环了当月的所有日期并编写了这段代码来查找员工休假的日期:
for (int i = 0; i < dates.Length; i++)
{
for (DateTime? date = leaveList[index].start_date; date <= leaveList[index].end_date; date = date.Value.AddDays(1))
{
allDates.Add(date);
}
}
其中 index 是从 0 到 7 的计数(在这种情况下)。索引将指向我从 SQL 查询中获得的任何员工。
【问题讨论】:
-
请也分享您的 C# 代码。
-
按员工姓名对数据集中的记录进行分组
-
你是怎么做到的?实体框架什么的?
-
@KobyDouek 我已经编辑了我的问题。
标签: c# asp.net sql-server