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

Czy ktoś może wyjaśnić to zapytanie?

Zasadniczo unpivotuje dane za pomocą 3 instrukcji select (1 dla każdego atrybutu) i UNION je razem, aby utworzyć wspólne wyrażenie tabelowe, dzięki czemu otrzymuje wiersze dla każdego atrybutu pracowników.

select employeeId, department, attribute1, 1 rn from employees union all
select employeeId, department, attribute2, 2 rn from employees union all
select employeeId, department, attribute3, 3 rn from employees

W drugiej tabeli używa funkcji okna, aby przypisać numer do atrybutu, działu. Używa tego numeru później, aby dołączyć z powrotem do swoich nieprzestawnych danych. Umieścił swój kod na przykład.

select a.*, row_number() over (partition by department order by attributeID) rn
  from attributes a

Sugeruję, abyś wykorzystał jego przykładowe dane, które dostarczył i uruchomił następujące. To pokaże Ci CTE. Myślę, że kiedy zobaczysz te dane, nabierze to większego sensu.

with a as (
select a.*, row_number() over (partition by department order by attributeID) rn
  from attributes a),
e as (
select employeeId, department, attribute1, 1 rn from employees union all
select employeeId, department, attribute2, 2 rn from employees union all
select employeeId, department, attribute3, 3 rn from employees
)

SELECT * from a
SELECT * from e



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jaka jest najlepsza metoda, aby zawsze uzyskać 2 miejsca po przecinku w Oracle?

  2. Dynamicznie wyszukuj nazwy kolumn dla tabeli w zapytaniu sql

  3. Indeksy Oracle i rodzaje indeksów w Oracle z przykładem

  4. Dlaczego nie ma danych wyjściowych po zakończeniu bloku PLSQL Anonymous?

  5. Jak zaimplementować relacje jeden-do-jednego, jeden-do-wielu i wiele-do-wielu podczas projektowania tabel?