Невозможно переместить данные строки в столбцы с помощью;разделенный в оракуле - PullRequest
0 голосов
/ 23 сентября 2019

Не могли бы вы пролить свет на то, как мне транспонировать приведенные ниже данные.

Create Table Pivot (Empname VARCHAR (10),
Deptno varchar(10),
Salary number (10));

Insert into Pivot (Empname, Deptno, Salary) values ('Max', '10',1000);
Insert into Pivot (Empname, Deptno, Salary) values ('David', '20',2000);
Insert into Pivot (Empname, Deptno, Salary) values ('AD', '30',3000);

Таким образом, вывод запроса на выборку будет

EMPNAME DEPTNO SALARY
MAX     10     1000
David   20     2000
AD      30     3000

Теперь требуемый формат, в котором нам нужны данные, приведен ниже:

Empname Max   David  Ad
Deptno  10    20     30
Sal     1000  2000   3000

Пожалуйста, поделитесьмысли по этому поводу.

1 Ответ

1 голос
/ 23 сентября 2019

Один вариант будет использовать Conditional Aggregation с UNION ALL:

select 'Deptno' as "Empname",
       max( case when Empname = 'Max' then to_number(Deptno) end ) as "Max",
       max( case when Empname = 'David' then to_number(Deptno) end ) as "David",
       max( case when Empname = 'AD' then to_number(Deptno) end ) as "AD"
  from pivot  
union all  
select 'Sal',
       max( case when Empname = 'Max' then Salary end ) ,
       max( case when Empname = 'David' then Salary end ) ,
       max( case when Empname = 'AD' then Salary end )
  from pivot;

или другой вариант будет использовать pivot предложение с UNION ALL:

select 'Deptno' as "Empname", max("Max") as "Max", max("David") as "David", max("AD") as "AD"
  from pivot   
  pivot( max(to_number(Deptno)) for Empname in ('Max' as "Max",'David' as "David",'AD' as "AD")) 
union all  
select 'Sal', max("Max") as "Max", max("David") as "David", max("AD") as "AD"
  from pivot   
  pivot( max(Salary) for Empname in ('Max' as "Max",'David' as "David",'AD' as "AD"));

Демо

...