Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Друго решение вместо Cursoring

Не съм сигурен, че наистина се нуждаете от рекурсивна заявка толкова, колкото от таблица Numbers/Tally, за да получите еквивалентните поредни номера за „ТЕКУЩИТЕ“ стойности като тези на „ПРЕДЛОЖЕНИТЕ“ стойности.

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. Анализирайте името на файла и пътя от пълния път

  2. Наборът от записи е затворен след изпълнение на съхранена процедура

  3. Липсва Microsoft Excel като опция в инструмента за импортиране на данни на SQL Server

  4. Не получава правилния брой в SQL

  5. Клауза VALUES в SQL Server