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
是否可以根据文本更新一系列行?
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