我有二个表
A表  DATA  VALUE B_ID
     200910   a     1    
     200910   b     2
     200909   c     1
     200909   d     2
B表  ID  NAME
     1   一
     2   二
我想查出:DATA    一 二 
          200910  a  b
          200909  c  d 怎么做啊?

解决方案 »

  1.   

    select data,max(decode(b_id,1,value)) 一,max(decode(b_id,2,value)) 二 from A group by data;
      

  2.   

    列名要动态取的话得用动态SQL吧。
      

  3.   

    create or replace procedure pro_test(strName varchar2)
    as
      strSQL varchar2(2000);
    begin
      strSQL := 'create or replace view ' || strName || ' as select data';
    for c in (select id,name from B order by 1) loop
    strSQL := strSQL || ',max(decode(b_id,'|| c.id ||',value)) "' || c.name || '"';
    end loop;
    strSQL := strSQL || ' from A group by data';
      execute immediate strSQL;
    end;
    /
      

  4.   

    先调用这个过程,exec pro_test('view_test');
    其中,参数是你建立的视图名称。
    然后直接查询产生的视图,执行select * from view_test;就可以了得到最后的结果了。
      

  5.   

    16:04:08 scott@TUNGKONG> select * from a;      DATA VAL       B_ID
    ---------- --- ----------
        200910 a            1
        200910 b            2
        200909 c            1
        200909 d            2已用时间:  00: 00: 00.00
    16:04:11 scott@TUNGKONG> select * from b;        ID NAME
    ---------- ----------
             1 一
             2 二已用时间:  00: 00: 00.01
    16:04:15 scott@TUNGKONG> create or replace procedure pro_test(strName varchar2)
    16:04:29   2  as
    16:04:29   3    strSQL varchar2(2000);
    16:04:29   4  begin
    16:04:29   5    strSQL := 'create or replace view ' || strName || ' as select data';
    16:04:29   6      for c in (select id,name from B order by 1) loop
    16:04:29   7          strSQL := strSQL || ',max(decode(b_id,'|| c.id ||',value)) "' || c.name || '"';
    16:04:29   8      end loop;
    16:04:29   9      strSQL := strSQL || ' from A group by data';
    16:04:29  10    execute immediate strSQL;
    16:04:29  11  end;
    16:04:29  12  /过程已创建。已用时间:  00: 00: 00.01
    16:04:30 scott@TUNGKONG> exec pro_test('view_test');PL/SQL 过程已成功完成。已用时间:  00: 00: 00.00
    16:04:38 scott@TUNGKONG> select * from view_test;      DATA 一  二
    ---------- --- ---
        200910 a   b
        200909 c   d已用时间:  00: 00: 00.01