0

問題は、列 A (セグメント) にシリアル GroupID を生成する必要があることです。これは、A から列 B (インジケーター) の次の C までの行をセグメントとして識別し始めます。列 B は、セグメントの開始 (A) とセグメントの終了 (C) の指標です。その間 (B または X) は、A と C の行を含むセグメント ID でマークする必要があります。

受信したファイル

生成されたグループ/セグメント ID を持つ処理済みファイル

問題の最善の解決策となる提案が必要です。これをゆっくりと行う.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 に答える