Tôi không chắc bạn có thực sự cần truy vấn đệ quy nhiều như bảng Numbers / Tally để nhận các số thứ tự tương đương cho các giá trị "CURRENT" như các giá trị "PROPOSED".
With
Numbers As
(
Select Row_Number() Over ( Order By C1.object_id ) As Value
From sys.columns As C1
Cross Join sys.columns As C2
)
, ProposedSequences As
(
Select NTRIId
, Row_Number() Over ( Order By NTRIId ) As Sequence
From Table
Where NTRITCode = 'PROPOSED'
Group By NTRIId
)
, CurrentSequences As
(
Select RID, NTRITCode, NTRIId, Parameter, Usage, Rate
, Numbers.Value As Sequence
From Table
Cross Join Numbers
Where NTRITCode = 'Current'
And Numbers.Value <= (Select Max(Sequence) From ProposedSequence)
)
Select Sequence, RID, NTRITCode, NTRIId, Parameter, Usage, Rate
From CurrentSequences
Union All
Select PS.Sequence, T.RID, T.NTRITCode, T.NTRIId, T.Parameter, T.Usage, T.Rate
From ProposedSequences As PS
Join Table As T
On T.NTRIId = PS.NTRIId
Order By PS.Sequence, T.NTRITCode