Oracle
 sql >> база данни >  >> RDS >> Oracle

Може ли някой да обясни тази заявка?

По принцип той депивотира данните с помощта на 3 оператора за избор (1 за всеки атрибут) и UNION ги заедно, за да направи общ израз на таблица, така че да получи редове за всеки атрибут на служителите.

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 a.*, row_number() over (partition by department order by attributeID) rn
  from attributes a

Предлагам ви да използвате неговите примерни данни, които той предостави, и да изпълните следното. Това ще ви покаже CTE. Мисля, че след като видите тези данни, ще има повече смисъл.

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. Как да съедините две таблици, за да получите следния резултат?

  2. Получаване на ORA-03115:неподдържан мрежов тип данни или грешка при представяне при извличане на масив от varchar от анонимен pl/sql

  3. Как да издигнем изключение в тригер? Има ли начин да се направи това?

  4. Регистрирайте изхода на DBMS_OUTPUT.Put_Line в таблица в Oracle с DBMS_OUTPUT.Get_Lines

  5. Има ли начин да се преодолее DSRA9010E 'setReadOnly' не се поддържа от изключението WebSphere?