sql >> Database teknologi >  >> RDS >> Oracle

Kan nogen forklare denne forespørgsel?

Grundlæggende deaktiverer han dataene ved hjælp af 3 udvalgte sætninger (1 for hver attribut) og UNION dem sammen for at lave et fælles tabeludtryk, så han får rækker for hver medarbejder-attribut.

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

Den anden tabel bruger en vinduesfunktion til at tildele et nummer til attribut, afdeling. Han bruger dette nummer senere til at slutte sig tilbage til sine ikke-pivoterede data. Han postede sin kode til eksemplet.

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

Jeg vil foreslå, at du bruger hans eksempeldata, han har leveret, og kører følgende. Dette vil vise dig CTE'erne. Jeg tror, ​​at når du ser de data, vil det give mere mening.

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. Er der nogen forskel mellem DateTime i c# og DateTime i SQL server?

  2. MSSQL Regulært udtryk

  3. God forebyggelse fra MYSQL-injektion?

  4. Unix tidsstempel bigint(20)