现在两表如下:
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.   

    不定行列做SQL行列转换已经够麻烦了,你还要建视图,这个要求太BT了
      

  2.   

    表A和表B是表,要求得到最后一个视图C, 请帮忙啊!
      

  3.   

    create view view_c as
    select a.id,a.name,
           sum(case when b.Name = '身高' then b.Value else null end) as 身高
           sum(case when b.Name = '体重' then b.value else null end) as 体重
           sum(case when b.Name = '年龄' then b.Value else null end) as 年龄
           --
    from a,b
    where a.id = b.aid(+)
      

  4.   

    参照:daviszr_1979的
    http://blog.csdn.net/daviszr_1979/archive/2007/12/14/1936318.aspx
    行转列分类总结
    新一篇: div和span概念和区别1 分类:  1.1 静态行转列:1 使用Case When;2 转成列的行固定写好的。  1.2 动态行转列:1 使用Case When;2 转成列的行是通过查询动态生成的。2 动态行转列的步骤:  2.1 定义Sql变量   2.2 确定分组列,赋给Sql变量。   2.3 拼接行转列部分Sql语句。      2.3.1 确定行转列的范围(Sql查询语句)      2.3.2 拼接行转列生成的数据。   2.4  添加分组条件。   2.5 执行行转列的结果。
      

  5.   

    可以参考一下:
    create or replace procedure test
    is
    aa   tb_b.Name%type;
    bb   varchar2(32767);
    cursor   cc is select distinct Name from tb_b;
    begin
              bb:='';
              open   cc;
              loop
              fetch   cc   into   aa;
              exit   when   cc%notfound;
              bb:=bb||',sum(decode(Name,'''||aa||''',Value,0))   as   '||aa;
              exit   when   cc%notfound;
              end   loop;
              close   cc;
              bb:='create  view  v_test  as  select tb_a.ID,tb_a.name'||bb||' from tb_b,tb_a where tb_a.id = tb_b.aid group by tb_a.ID,tb_a.name';
            --v_test为创建的一个保存结果的视图
            execute   immediate   bb;end;
      

  6.   

    create or replace procedure test is
      aa tb_b.Name%type;
      bb varchar2(32767);
      cursor cc is
        select distinct Name from tb_b;
    begin
      bb := '';
      open cc;
      loop
        fetch cc
          into aa;
        exit when cc%notfound;
        bb := bb || ',sum(decode(Name,''' || aa || ''',Value,0))   as   ' || aa;
        exit when cc%notfound;
      end loop;
      close cc;
      bb := 'create  view  v_test  as  select tb_a.ID,tb_a.name' || bb ||
            ' from tb_b,tb_a where tb_a.id = tb_b.aid group by tb_a.ID,tb_a.name';
      --v_test为创建的一个保存结果的视图
      execute immediate bb;
      --  end;end;
      

  7.   

    19楼的和直接写sql语句没有本质上的区别,只不过是方便点而已,当B的name字段加入不同的属性(比如腰围)的时候就不行了,一句话反正用视图就是行不通的。