Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Giải pháp khác thay vì Cursoring

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lỗi:Phải khai báo biến vô hướng để chèn câu lệnh trong nhiều cơ sở dữ liệu

  2. Phát hiện các phạm vi ngày liên tiếp bằng SQL

  3. Kiểm tra có bao nhiêu mục thư trong hàng đợi trong thư cơ sở dữ liệu trong SQL Server (T-SQL)

  4. Cách sao chép cơ sở dữ liệu SQL Server từ phiên bản này sang phiên bản khác

  5. ROW_NUMBER Thay thế cho SQL Server 2000