MSSQL(SQL SERVER 16) 根据非整型值更新行范围

MSSQL(SQL SERVER 16) Update range of rows based on non int values

是否可以根据文本更新一系列行? [编辑]:左边的table是已经导入的数据。 Table右边是最终目标。

B 列,值 ISA-IEA 用于指定 EDI 订单的开始和结束(简化)。真实数据的行数是可变的,所以有时可能有 5 行,有时有 45 行。所以我不能简单地 select 5 行然后继续下一个。 感谢您的指导。

编辑澄清:我将离开原来的例子,并包括这个额外的例子。同样,左侧的 table 是当前数据,而我要完成的是右侧。谢谢!

您只需抓住 B 等于 ISA 的最顶层(按 E 列 desc)行。 方法如下:

drop table if exists dbo.Test;

create table dbo.Test (
    A int
    , B varchar(100)
    , C varchar(100)
    , D varchar(100)
    , E int
);

insert into dbo.Test (A, B, C, D, E)
values (null, 'ISA', '170607', 48, 1)
    , (null, 'BFR', '170607', 1, 2)
    , (null, 'FST', '170607', 1, 3)
    , (null, 'IEA', '170607', 48, 4)
    , (null, 'ISA', '170607', 49, 5)
    , (null, 'BFR', '170607', 1, 6)
    , (null, 'FST', '170607', 1, 8)
    , (null, 'FST', '170607', 1, 9)
    , (null, 'IEA', '170607', 49, 10);

update tu
set
    A = tc.D
from dbo.Test t
    outer apply (
            select
            top (1)
                tt.D
            from dbo.Test tt
            where tt.B = 'ISA'
                and tt.E <= t.E
            order by tt.E desc
    ) tc
    inner join dbo.Test tu on t.E = tu.E

select
*
from dbo.Test t