Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Wyliczanie wierszy w sprzężeniu wewnętrznym

Nie potrzebujesz wewnętrznego sprzężenia z fikcyjną tabelą ani funkcji analitycznej, aby wygenerować numery wierszy; możesz po prostu użyć funkcji connect by (i odpowiadającej jej funkcji poziomu) na samym stole, na przykład:

WITH tst_dim_ban_selected AS (SELECT 1 ban_key, 'a' cust_fullname, 3 n FROM dual UNION ALL
                              SELECT 2 ban_key, 'b' cust_fullname, 4 n FROM dual)
-- end of mimicking your table with data in it. See SQL below
SELECT db.ban_key,
       db.cust_fullname,
       LEVEL row_num
FROM   tst_dim_ban_selected db
CONNECT BY LEVEL <= db.n
           AND PRIOR db.ban_key = db.ban_key -- assuming this is the primary key
           AND PRIOR sys_guid() IS NOT NULL;

   BAN_KEY CUST_FULLNAME    ROW_NUM
---------- ------------- ----------
         1 a                      1
         1 a                      2
         1 a                      3
         2 b                      1
         2 b                      2
         2 b                      3
         2 b                      4

Jeśli masz inne kolumny niż ban_key w kluczu podstawowym tabeli, musisz upewnić się, że są one uwzględnione na liście klauzuli connect by o wartości prior <column> = <column> s. Dzieje się tak, aby funkcja connect by mogła jednoznacznie zidentyfikować każdy wiersz, co oznacza, że ​​zapętla się tuż nad tym wierszem i bez innych. PRIOR sys_guid() IS NOT NULL jest wymagane, aby zapobiec występowaniu połączeń przez pętle.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL wybierając wiersze według najnowszej daty z dwiema unikalnymi kolumnami

  2. Jaka jest domyślna precyzja i skala liczby w Oracle?

  3. Błąd SSMA dla Oracle Connect to Oracle

  4. Czy można skorzystać ze zwrotu w procedurze składowanej?

  5. Wyodrębnij dane z typu zdefiniowanego przez użytkownika za pomocą cx_Oracle