SQL Server:如何计算不同容量时段的工作日

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL Server:如何计算不同容量时段的工作日相关的知识,希望对你有一定的参考价值。

在SQL Server 2008中,我需要生成一个带有参数的SQL报告,用户可以在其中输入StartdateEnddateDepartment name;他们得到的结果是这个时期可能的床位。然后我可以将它与实际(已实现的)床位进行比较,该职业可以提供有关部门效率的信息。

鉴于此表@@Temptable01

Department_name Bed_Capacity    CAP_Startdate   CAP_Enddate
------------------------------------------------------------
Dept_ A              20           1-1-2015      31-12-2015
Dept_ A              22           1-1-2016      31-8-2016
Dept_ B              21           1-1-2015      Null
Dept_ C              30           1-1-2017      30-6-2017
Dept_ A              24           1-9-2016      Null
Dept_ C              32           1-7-2017      Null

可以通过使用选择语句计算可能的床位(床位天数)

Bed_Capacity * (enddate – startddate)

当选择报告期间与不同容量的多个期间重叠时会出现问题。

我正在考虑使用如下的案例陈述:

 Select 
     Department_name, 
     (case when startdate between CAP_Startdate and CAP_Enddate 
                      and (enddate between CAP_Startdate and CAP_Enddate 
                           or CAP_Enddate is null) 
              then Bed_Capacity * (Enddate – CAP_Startdate)) as beddays 
From 
    @@Temptable01

这显然不完整(甚至是正确的),但我似乎无法找出正确的方法。不知何故,我需要确定该时段与每个容量类别重叠的天数,然后乘以该容量并将它们全部加起来

谁能给我任何建议?

答案

你能不能使用DATEDIFF函数算出重叠天数?

DECLARE @t TABLE(
 Department NVARCHAR(10),
 BedCapacity INT,
 CAP_StartDate DATE,
 CAP_EndDate DATE)

INSERT INTO @t
VALUES
 ('Dept_ A', 20,'2015-01-01', '2015-12-31'),
 ('Dept_ A', 22,'2016-01-01', '2016-08-31'),
 ('Dept_ B', 21,'2015-01-01', NULL),
 ('Dept_ C', 30,'2017-01-01', '2017-06-30'),
 ('Dept_ A', 24,'2016-09-01', NULL),
 ('Dept_ C', 32,'2017-07-01', NULL)

DECLARE 
 @StartDate DATE = '2015-03-01',
 @EndDate DATE = '2016-02-28'

SELECT 
 *,
 t.BedCapacity * DATEDIFF(DAY, 
 CASE WHEN t.CAP_StartDate > @StartDate THEN t.CAP_StartDate ELSE @StartDate END, 
 CASE WHEN COALESCE(t.CAP_EndDate, @EndDate) < @EndDate THEN t.CAP_EndDate ELSE @EndDate END) Total
FROM @t t
WHERE t.CAP_StartDate <= @EndDate
 AND COALESCE(t.CAP_EndDate, @EndDate) >= @StartDate

以上是关于SQL Server:如何计算不同容量时段的工作日的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server ,按 24 小时时段拆分持续时间行

Microsoft SQL Server Management Studio 已超过了锁请求超时时段。 (Microsoft SQL Server,错误: 1222)

如何在 SQL Server 中的滑动窗口上聚合(计算不同的项目)?

如何更改实体框架项目以使用 Microsoft SQL Server

如何将 Excel 数据从不同的工作表导出到 SQL-SERVER 数据库?

SQL Server - 如何根据将插入数据半小时的表中的几个参数来计算持续时间?