Jij*_* PK 3 sql oracle pivot oracle11g
我有一个表格如下图所示
Empid Field Type Field Value
123 Name John
123 Age 33
124 Name Tijo
124 Age 24
Run Code Online (Sandbox Code Playgroud)
输出应采用以下格式
Empid Name Age
123 John 33
124 Tijo 24
Run Code Online (Sandbox Code Playgroud)
如何使用oracle数据库中的查询实现此操作?
这种类型的行转换为列称为PIVOT.有几种方法可以做到这一点.
由于您使用的是Oracle 11g,因此可以使用PIVOT功能:
select empid, Name, age
from
(
select empid,
fieldtype,
fieldvalue
from yt
)
pivot
(
max(fieldvalue)
for fieldtype in ('Name' as Name, 'Age' as Age)
);
Run Code Online (Sandbox Code Playgroud)
在Oracle 11g之前,您可以将聚合函数与CASE
表达式一起使用:
select empid,
max(case when fieldtype = 'Name' then fieldvalue end) name,
max(case when fieldtype = 'Age' then fieldvalue end) age
from yt
group by empid;
Run Code Online (Sandbox Code Playgroud)
您还可以通过多次加入表格来获得结果:
select t1.empid,
t1.fieldvalue name,
t2.fieldvalue age
from yt t1
left join yt t2
on t1.empid = t2.empid
and t2.fieldtype = 'Age'
where t1.fieldtype = 'Name';
Run Code Online (Sandbox Code Playgroud)
请参阅SQL Fiddle with Demo.每个版本都给出了结果:
| EMPID | NAME | AGE |
----------------------
| 123 | John | 33 |
| 124 | Tijo | 24 |
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7054 次 |
最近记录: |