【发布时间】:2020-04-23 16:07:25
【问题描述】:
我正在使用SQL Server 2014,并且我的数据库中有一个名为t1 的表(仅提取下面显示的两列):
ResaID StayDate
100 2020-02-03
100 2020-02-04
100 2020-02-05
120 2020-04-06
120 2020-04-07
120 2020-04-08
120 2020-04-09
120 2020-04-10
我需要根据以下信息更改StayDate 列中的日期(与提供的完全一致的摘录):
ID StartDate EndDate
100 2020-06-04 2020-06-06
120 2021-03-01 2021-03-05
我已经开始编写我的 T-SQL 查询,如下所示(但它变得相当乏味,因为我必须为超过 100 个 ResaID 编写它!):
USE MyDatabase
UPDATE t1
SET StayDate = CASE WHEN ResaID = 100 and StayDate = '2020-02-03' THEN '2020-06-04'
WHEN ResaID = 100 and StayDate = '2020-02-04' THEN '2020-06-05'
WHEN ResaID = 100 and StayDate = '2020-02-05' THEN '2020-06-06'
...
ELSE StayDate
END
有没有更有效的方法来解决这个问题?
【问题讨论】:
-
您有单独的日期范围表格吗?
-
还没有,但我可以为这些日期范围创建一个表格。
-
请阅读this,了解一些改进问题的技巧。
-
@HABO 感谢您的链接。我一定会看看的。
-
我正在寻找答案,但有几个问题。您提到您的
t1表还有其他列。在这些“辅助”列中,数据是 ResaID 和 StayDate 独有的,还是仅仅是 ResaID?另外,每次的停留时间都一样吗?与 ResaID 一样,有 3 个停留日期,并且在新表中还提供了 3 天的范围。这是否始终一致,或者更新的数据是否包含更短/更长的停留时间?
标签: sql-server tsql case