我有模式的表格如下列值到头甲骨文
Empid Field Type Field Value
123 Name John
123 Age 33
124 Name Tijo
124 Age 24
输出应该在followinf格式
Empid Name Age
123 John 33
124 Tijo 24
我怎样才能实现这种从Oracle数据库使用查询?
我有模式的表格如下列值到头甲骨文
Empid Field Type Field Value
123 Name John
123 Age 33
124 Name Tijo
124 Age 24
输出应该在followinf格式
Empid Name Age
123 John 33
124 Tijo 24
我怎样才能实现这种从Oracle数据库使用查询?
听起来像你正在试图PIVOT
你的表。一种选择是使用MAX
与CASE
:
select empid,
max(case when fieldtype = 'Name' then fieldvalue end) Name,
max(case when fieldtype = 'Age' then fieldvalue end) Age
from yourtable
group by empid
这种类型的行转变成列称为一个支点。有几种方法可以做到这一点。
由于使用的是Oracle 11g中,你可以使用旋转功能:
select empid, Name, age
from
(
select empid,
fieldtype,
fieldvalue
from yt
)
pivot
(
max(fieldvalue)
for fieldtype in ('Name' as Name, 'Age' as Age)
);
在此之前的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;
您还可以通过多次参加在桌子上得到的结果:
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';
见SQL Fiddle with Demo。每个版本给出结果:
| EMPID | NAME | AGE |
----------------------
| 123 | John | 33 |
| 124 | Tijo | 24 |
@JijilPK - np,很高兴我们可以帮助! – sgeddes 2013-04-24 17:14:20