sql >> Databáze >  >> RDS >> Oracle

Může někdo vysvětlit tento dotaz?

V podstatě rozloží data pomocí 3 vybraných příkazů (1 pro každý atribut) a UNION společně vytvoří společný tabulkový výraz, takže získá řádky pro každý atribut zaměstnance.

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

V druhé tabulce se pomocí funkce okna přiřadí číslo atributu, oddělení. Toto číslo později použije k připojení zpět ke svým neotočným datům. Zveřejnil svůj kód pro příklad.

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

Navrhoval bych, abyste použili jeho ukázková data, která poskytl, a spustili následující. To vám ukáže CTE. Myslím, že jakmile tato data uvidíte, budou dávat větší smysl.

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. Jak vrátit dataframe.to_sql v pythonu v SQLAlchemy?

  2. Chyba MySQLTest při pokusu o připojení C# k MySql

  3. SQL dotaz k nalezení chybějících řádků mezi dvěma souvisejícími tabulkami

  4. Změna posunu časového pásma na hodnotě datetimeoffset na serveru SQL Server (T-SQL)