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

Zastosuj rekurencyjne CTE w zgrupowanych wierszach tabeli (SQL Server 2005)

Kilka rzeczy do wypróbowania

  • Zamiast dołączać do wszystkich wiersz i filtrowanie wyników w klauzuli WHERE, czy możesz spróbować, jeśli zmniejszenie liczby rekordów bezpośrednio w łączeniu przyspieszy sprawę?
  • Dodaj indeks obejmujący PersonKey, RoomKey, CheckOut i Row i sprawdź, czy poprawia to wydajność.

Oświadczenie SQL

;with CTE (PERSONKEY, ROOMKEY, CHECKIN, CHECKOUT, ROW)
as (select RU.PERSONKEY,
           RU.ROOMKEY, 
           RU.CHECKIN,
           RU.CHECKOUT,
           RU.ROW
    from ROOMUSAGE RU
    where RU.ROW = 1

    union all

    select RU.PERSONKEY,
           RU.ROOMKEY, 
           RU.CHECKIN,
           RU.CHECKOUT,
           RU.ROW
    from ROOMUSAGE RU 
         inner join CTE on CTE.ROW + 1 = RU.ROW
                           and CTE.CHECKIN = RU.CHECKOUT
                           and CTE.PERSONKEY = RU.PERSONKEY
                           and CTE.ROOMKEY = RU.ROOMKEY
)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Musisz zadeklarować zmienną skalę

  2. Pobierz N ostatnich wierszy z tabeli za pomocą jednej procedury składowanej

  3. Instrukcja SQL do wybrania grupy zawierającej cały zestaw wartości

  4. Uruchamiaj tylko wtedy, gdy warunek jest spełniony w SQL Server

  5. Przekazywanie pustej listy do parametru typu tabeli zdefiniowanego przez użytkownika w funkcji skalarnej