现在两表如下:
A
ID name
1 张三
2 李四
B
ID AID Name Value
1 1 身高 170
2 1 体重 50
3 2 年龄 24现要得到视图C
ID Name 身高 体重 年龄
1 张三 170 50
2 李四 24其中B中是不定行的。 可能还有不定数量的记录
请教要产生这样的行转列视图应该怎么做?
求高手帮忙,谢谢
A
ID name
1 张三
2 李四
B
ID AID Name Value
1 1 身高 170
2 1 体重 50
3 2 年龄 24现要得到视图C
ID Name 身高 体重 年龄
1 张三 170 50
2 李四 24其中B中是不定行的。 可能还有不定数量的记录
请教要产生这样的行转列视图应该怎么做?
求高手帮忙,谢谢
with a as(
select 1 id,'张三' name from dual union all
select 2,'李四' from dual)
,b as(
select 1 id,1 aid,'身高' name,170 value from dual union all
select 2,1,'体重',50 from dual union all
select 3,2,'年龄',24 from dual)
select a.id "编号",a.name "姓名",
nvl(max(decode(b.name,'身高',b.value)),0) "身高",
nvl(max(decode(b.name,'体重',b.value)),0) "体重",
nvl(max(decode(b.name,'年龄',b.value)),0) "年龄"
from a,b
where a.id=b.aid
group by a.id,a.name
/
编号 姓名 身高 体重 年龄
---------- ---- ---------- ---------- ----------
1 张三 170 50 0
2 李四 0 0 24
--人就这么几项基本特征,要就多加几个decode()函数
nvl(max(decode(b.name,'腰围',b.value)),0) "腰围"
nvl(max(decode(b.name,'胸围',b.value)),0) "胸围"
nvl(max(decode(b.name,'第三围',b.value)),0) "第三维"
--
create view view_people
as
select a.id "编号",a.name "姓名",
nvl(max(decode(b.name,'身高',b.value)),0) "身高",
nvl(max(decode(b.name,'体重',b.value)),0) "体重",
nvl(max(decode(b.name,'年龄',b.value)),0) "年龄"
from a,b
where a.id=b.aid
group by a.id,a.name
/