0

问题是必须在 A(Segment)列中生成一个串行 GroupID,它开始将 A 到 B(Indicator)列的下一个 C 的行标识为一个段。B 列是段开始(A)和段结束(C)的指示符。介于(B 或 X)之间的任何内容都应标有段 ID,包括带有 A 和 C 的行。希望它足够清楚。

收到的文件

具有生成的组/段标识的已处理文件

我需要最好的解决问题的建议。我有一个 .Net 循环缓慢地执行此操作,但正在尝试使用 CTE。请帮忙。

4

1 回答 1

1

如果您的表格有一个 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 = '##'
于 2013-02-16T21:43:21.113 回答