现在两表如下:
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中是不定行的。 可能还有不定数量的记录
请教要产生这样的行转列视图应该怎么做?
求高手帮忙,谢谢

解决方案 »

  1.   


    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
    /