我想使用PIVOT函数将行转换为列。
示例如下
表
EMP No EMP Name
------- --------
1 ABC
2 PQR
输出应为
Col1 Col2
---- ----
Emp No 1
Emp Name ABC
EMP No 2
Emp Name PQR
我对循环没问题然而我们应该使用PIVOT,但是谷歌没有得到任何匹配。
请建议并发送一些示例代码。
答案 0 :(得分:1)
实际上,根据您的要求,您需要unpivot
,而不是pivot
。但为此,两列的数据类型应该相同,在这种情况下为字符
with tab(emp_no, emp_name) as (
select '1' ,'abc' from dual union all
select '2' ,'PQR' from dual)
----
--End of Data Perparation
----
select *
from tab
unpivot (col2 for col1 in ( emp_no as 'EMP No', emp_name as 'Emp Name'));
输出
| COL1 | COL2 |
|----------|------|
| EMP No | 1 |
| Emp Name | abc |
| EMP No | 2 |
| Emp Name | PQR |
答案 1 :(得分:0)
我不确定是否可以使用PIVOT完成此操作。您可以单独选择列并UNION它们。
select 'Emp No' col1, emp_no col2 from tab
union all
select 'Emp Name', emp_name from tab;
请注意,两列的数据类型应相同。否则你需要转换/转换其中一个。
此外,结果可能不是您想要的顺序。您需要明确地指定order by子句。
select col1, col2 from(
select 'Emp No' col1, emp_no col2, emp_no from tab
union all
select 'Emp Name', emp_name, emp_no from tab
)
order by emp_no, case col1 when 'Emp No' then 1 else 2 end;