我正在尝试填充一个日期表,其中包含 future 35 年的每个日期以及有关每一天的信息。
我的 ERP 系统有一个会计年度表 (GLRULE),它指定每个特定年份的会计期间,因为许多公司不按日历月份工作。
GLRule 表包含每个时期的一条记录,如下所示:
fcbasis fcname fcstatus fdend fdstart flisadjust flisaudit fnnumber freval identity_column
A FY 2000 C 1/28/2000 0:00:00 1/1/2000 0:00:00 FALSE FALSE 1 FALSE 37
A FY 2000 C 2/25/2000 0:00:00 1/29/2000 0:00:00 FALSE FALSE 2 FALSE 38
A FY 2000 C 3/31/2000 0:00:00 2/26/2000 0:00:00 FALSE FALSE 3 FALSE 39
A FY 2000 C 4/28/2000 0:00:00 4/1/2000 0:00:00 FALSE FALSE 4 FALSE 40
A FY 2000 C 5/26/2000 0:00:00 4/29/2000 0:00:00 FALSE FALSE 5 FALSE 41
A FY 2000 C 6/30/2000 0:00:00 5/27/2000 0:00:00 FALSE FALSE 6 FALSE 42
无论如何,我可以使用类似于以下的查询一次更新一个字段:
UPDATE redfridaydates.dbo.testdates
SET [FISCAL_PERIOD] =
(SELECT fnnumber
FROM m2mdata01..glrule GLR
where DATE >= GLR.FDSTART and DATE <= GLR.FDEND)
是否有更好的方法一次更新多个字段?我不知道如何才能这样做,因为我没有加入。
最佳答案
听起来您尝试更新的表对于每个日期都有一条记录。答案是这样假设的。如果您可以确保 GL 数据源没有重叠日期:
UPDATE T
SET T.[FISCAL_PERIOD] = GLR.fnnumber,
T.Foo = GLR.Bar,
T.Bat = GLR.Baz --etc.
FROM redfridaydates.dbo.testdates AS T
INNER JOIN m2mdata01..glrule AS GLR
ON T.[Date] BETWEEN GLR.FDSTART AND GLR.FDEND
如果您有兴趣,这里有 proof of concept on some test data .
关于sql - 在没有一对一关系的情况下从一张表更新另一张表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3259956/