在 SQL Server 中计算员工一个月的休假数

Posted

技术标签:

【中文标题】在 SQL Server 中计算员工一个月的休假数【英文标题】:Calculate number of leaves taken by Employee in a month in SQL Server 【发布时间】:2015-08-19 09:22:37 【问题描述】:

如何?

Empid   Leaveid   Fromdate    Todate      No of days
100     L1        2008-05-10  2008-05-13  3
100     L2        2008-05-20  2008-05-21  1
100     L3        2008-05-25  2008-06-05  12
100     L4        2009-01-20  2009-01-22  2
100     L5        2009-02-14  2009-02-20  6
100     L6        2009-02-28  2009-02-28  1

【问题讨论】:

如果您的家庭作业/考试/corsework,请发布其余部分,我们也可以为您完成 :) 使用聚合函数 (SUM) 和 GROUP BY 子句 【参考方案1】:

使用SUMGROUP BY

SELECT Empid, SUM([No of Days]) AS Days
FROM leavetable
GROUP BY Empid

在GROUP BY 和SUM 阅读更多内容。

这会给你:

Empid Days
100   25

或者,如果您的意思是计算员工休假的次数,请使用 Count

SELECT Empid, Count(Leaveid) AS LeaveTotal 
FROM leavetable
GROUP BY Empid

在此处阅读更多信息COUNT。

这会给你:

Empid LeaveTotal
100   6

【讨论】:

我认为用户想要一个月内的叶子,而你给他总叶子或叶子总数。这不是要求。【参考方案2】:
CREATE TABLE #EmpLeave (EmpId INT, LeaveID VARCHAR(5), FromDate Date, Todate Date, NoOfDays INT)
INSERT INTO #EmpLeave VALUES
(100,     'L1',        '2008-05-10',  '2008-05-13',  4),
(100,     'L2',        '2008-05-20',  '2008-05-21',  2),
(100,     'L3',        '2008-05-25',  '2008-06-05',  12),
(100,     'L4',        '2009-01-20',  '2009-01-22',  3),
(100,     'L5',        '2009-02-14',  '2009-02-20',  7),
(100,     'L6',        '2009-02-28',  '2009-02-28',  1)


;With CTE_leave AS (
select * from #EmpLeave where Month(FromDate) <> Month(ToDate) )


SELECT a.EMPID,DATENAME(MONTH,FromDate ) Month ,SUM(a.LeaveCount) LeaveTaken
FROM 
(

SELECT C.EMPID,C.LeaveID, C.FromDate, DATEDIFF(DD,C.FromDate,EOMonth(FromDate) ) + 1 LeaveCount
FROM CTE_Leave C
UNION
SELECT C.EMPID, C.LeaveID, DATEADD(DD,1, EOMonth(FromDate)) fromDate, DATEDIFF(DD,DATEADD(DD,1, EOMonth(FromDate)), C.ToDate ) + 1 LeaveCount
FROM CTE_Leave C
UNION
SELECT EMPID, LeaveID, FromDate,  DATEDIFF(DD, FromDate, Todate) + 1 LeaveCount FROM #EmpLeave where Month(FromDate) = Month(ToDate) 
) a
group by a.EMPID,  DATENAME(MONTH,FromDate )

@Anchalose 找到上述可能的解决方案。让我们知道可以解决您的问题。 请在发布您的查询时同时发布架构详细信息以及所需的结果,这将有助于我们更好地理解问题。

@Matt,请不要使用脏话,并尝试按要求发布解决方案。

【讨论】:

以上是关于在 SQL Server 中计算员工一个月的休假数的主要内容,如果未能解决你的问题,请参考以下文章

如何将不符合WHERE条件的联接表中的数据包含为空值(SQL)

列出所有带休假标题的员工,并在sql join中保留申请

SQL Server Management Studio 一个月的总销售额

SQL server如何获取给定月的倒数数第二天

获取 Sql-Server 中逗号分隔值中未分组列的详细信息

员工的 SQL 时间表