sql >> Database >  >> RDS >> Oracle

Kan iemand deze vraag uitleggen?

In principe maakt hij de draaiing van de gegevens ongedaan met behulp van 3 select-statements (1 voor elk attribuut) en UNION ze samen om een ​​gemeenschappelijke tabeluitdrukking te maken, zodat hij rijen krijgt voor elk werknemersattribuut.

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

De andere tabel gebruikt hij een vensterfunctie om een ​​nummer toe te kennen aan attribuut, afdeling. Hij gebruikt dit nummer later om terug te keren naar zijn niet-gedraaide gegevens. Hij plaatste zijn code voor het voorbeeld.

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

Ik zou willen voorstellen dat u zijn voorbeeldgegevens gebruikt die hij heeft verstrekt en het volgende uitvoert. Dit toont u de CTE's. Ik denk dat als je die gegevens eenmaal ziet, het logischer zal zijn.

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. Hoe kan ik logboekgroei in SQL Server voorkomen bij het invoegen van miljoenen records?

  2. PDO-uitzondering wordt niet gegenereerd voor triggerfouten

  3. Waarom zie ik dat COLLATIE 'xxx' niet geldig is voor KARAKTERSET 'yyy'

  4. Hoe willekeurige rijen uit de database herhalen?