Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Inne rozwiązanie zamiast Cursoring

Nie jestem pewien, czy naprawdę potrzebujesz rekurencyjnej kwerendy tak samo, jak tabeli Liczby/Tally, aby uzyskać równoważne numery sekwencji dla wartości „BIEŻĄCY”, jak te z wartości „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. Czy w tsql wstawka z instrukcją Select jest bezpieczna pod względem współbieżności?

  2. jdbc.SQLServerException:Logowanie nie powiodło się dla użytkownika dla dowolnego użytkownika

  3. Wyodrębnij kolumnę DB i podziel, aby znaleźć inny wynik tabeli

  4. UPDATE nie powiodła się, ponieważ następujące opcje SET mają nieprawidłowe ustawienia:„QUOTED_IDENTIFIER”

  5. Jak zsumować wartość kolumn przestawnych i dodać je do innej kolumny przestawnej?