使用 SQL 中的日期表将工作日添加到另一个表

尼丁·黛布

我有这两个带有值的表:

create table FieldTable (
    FieldId int,
    FieldName varchar(256),
    FieldValue sql_variant);
go

insert into FieldTable values (1, 'ABC', '04/17/2020');
go

create table DatbeTable (
    Dt date,
    DayType char);
go

insert into DatbeTable values ('2020-04-01','B');
insert into DatbeTable values ('2020-04-02','B');
insert into DatbeTable values ('2020-04-03','B');
insert into DatbeTable values ('2020-04-04','W');
insert into DatbeTable values ('2020-04-05','W');
insert into DatbeTable values ('2020-04-06','B');
insert into DatbeTable values ('2020-04-07','B');
insert into DatbeTable values ('2020-04-08','B');
insert into DatbeTable values ('2020-04-09','B');
insert into DatbeTable values ('2020-04-10','B');
insert into DatbeTable values ('2020-04-11','W');
insert into DatbeTable values ('2020-04-12','W');
insert into DatbeTable values ('2020-04-13','B');
insert into DatbeTable values ('2020-04-14','B');
insert into DatbeTable values ('2020-04-15','B');
insert into DatbeTable values ('2020-04-16','B');
insert into DatbeTable values ('2020-04-17','B');
insert into DatbeTable values ('2020-04-18','W');
insert into DatbeTable values ('2020-04-19','W');
insert into DatbeTable values ('2020-04-20','B');
insert into DatbeTable values ('2020-04-21','B');
insert into DatbeTable values ('2020-04-22','B');
insert into DatbeTable values ('2020-04-23','B');
insert into DatbeTable values ('2020-04-24','B');
insert into DatbeTable values ('2020-04-25','W');
insert into DatbeTable values ('2020-04-26','W');
insert into DatbeTable values ('2020-04-27','B');
insert into DatbeTable values ('2020-04-28','B');
insert into DatbeTable values ('2020-04-29','B');
insert into DatbeTable values ('2020-04-30','B');
go

我想从FieldValue日期到新列添加 3 个工作日NewFieldValue对于该行。

select 
    FieldId, 
    FieldName,
    FieldValue--,
    --NewFieldValue
into #temp
from FieldTable ft
join DatbeTable d
    on format(try_convert(date, ft.FieldValue), 'd', 'en-us') = format(try_convert(date, d.Dt), 'd', 'en-us');
go

我真的不知道如何使用这两个表来获得以下结果:

FieldId FieldName   FieldValue  NewFieldValue
------- ---------   ----------  -------------
1       ABC         04/17/2020  04/22/2020
松鼠

您可以使用从基准日期中row_number()找出nth工作日

select 
        FieldId, 
        FieldName,
        FieldValue, 
        d.Dt as NewFieldValue
from    FieldTable ft
        cross apply 
        (
            select  x.Dt, day_no = row_number() over (ORDER BY x.Dt)
            from    DatbeTable x
            where   x.Dt        > try_convert(date, ft.FieldValue)
            and     x.DayType   = 'B' -- business day only
        ) d
where   d.day_no    = 3 -- add 3 business days

注意:不要将日期转换为字符串进行比较。

PS:你应该解释什么是BW认为很明显是 Business 和 Weekend 但是,如果解释表中的相关列会更清楚。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用基于复选框的选择将多行数据从一个 sql 表添加到另一个?

使用来自另一个表的数据将列添加到表

使用 Python 将现有 BQ 表中的列添加到另一个 BQ 表

如何使用SQLite将一个表的count()添加到具有多个其他表的联接的SQL查询中?

如何使用 SQL TRIGGER 将另一个表中的行插入到新表中?

使用SQL表联接将一个表中的值用作对另一个表中的值的引用(主键)

使用PL / SQL将数据从表插入到另一个表

使用sas或sql根据月度日期变量将新记录添加到表中

如何使用日历参考表在SQL Server中从给定日期计算工作日

PL / SQL-使用另一个表中的值更新具有最大日期的行

使用JavaScript将工作日添加到日期

如何使用 openpyxl 将现有工作簿表添加到另一个现有工作簿?

SQL。如何一次将数据插入到两个表中,当一个表与另一个使用外键相关时

使用另一个表中的条件从表中进行SQL查询

使用来自另一个表的信息更新SQL Server中的表

Oracle SQL:使用另一个表中的数据更新表

如果表中存在行,则在SQL中使用另一个表值

如何使用SQL SELECT基于另一个表中的特定行查询表

使用另一个表中的值对SQL表进行排序

使用另一个表中的条件查询SQL表

SQL更新表使用另一个数据库中的表

如何使用sql通过另一个表中的值过滤表?

从另一个表使用SELECT插入SQL

SQL Delete使用另一个表的值

如何使用 SQL 中另一个表中的一列创建一个新表?

使用pl / sql将数据插入另一个表后,如何截断一个表?

T-SQL仅使用变量中的值而不是一列将行的副本从一个表插入到另一个表

SQL:使用CASE将一个表中的记录与另一个表中的计数连接起来

如何从sql中提取数据,将列添加到一行并将其插入到另一个sql表中?