问题是必须在 A(Segment)列中生成一个串行 GroupID,它开始将 A 到 B(Indicator)列的下一个 C 的行标识为一个段。B 列是段开始(A)和段结束(C)的指示符。介于(B 或 X)之间的任何内容都应标有段 ID,包括带有 A 和 C 的行。希望它足够清楚。
我需要最好的解决问题的建议。我有一个 .Net 循环缓慢地执行此操作,但正在尝试使用 CTE。请帮忙。
问题是必须在 A(Segment)列中生成一个串行 GroupID,它开始将 A 到 B(Indicator)列的下一个 C 的行标识为一个段。B 列是段开始(A)和段结束(C)的指示符。介于(B 或 X)之间的任何内容都应标有段 ID,包括带有 A 和 C 的行。希望它足够清楚。
我需要最好的解决问题的建议。我有一个 .Net 循环缓慢地执行此操作,但正在尝试使用 CTE。请帮忙。
如果您的表格有一个 Id 列,并且您的表格被称为 [Stuff],那么这有效:
-- Set the segment values for rows where Indicator = 'A'
update [Stuff]
set Segment = s.row
from
(select ROW_NUMBER() OVER(ORDER BY Id) as Row, Id
from [Stuff] where Indicator = 'A' ) s
where
s.Id = [Stuff].Id
-- Update the other rows
update [Stuff]
set Segment = (
select top 1 Segment from [Stuff] s1
where s1.Segment is not null and s1.Id <= [Stuff].Id
order by Id desc
)
update [Stuff] set Segment = -1 where Indicator = '#'
update [Stuff] set Segment = 0 where Indicator = '##'