本帖最后由 xiaohu8855 于 2010-03-06 14:40:27 编辑

解决方案 »

  1.   

    SQL> select t1.struct_id,t1.struct_name,t2.size_id,t2.key#,
      2  case when t3.size_id in(select size_id from t3 where c_id=28)
      3  then t3.value# else 'null' end as value#28,
      4  case when t3.size_id in(select size_id from t3 where c_id=29)
      5  then t3.value# else 'null' end as value#29 
      6  from t1,t2,t3
      7  where t1.struct_id=t2.struct_id
      8  and t2.size_id=t3.size_id
      9  and t1.struct_id=1; STRUCT_ID STRUCT_NAM    SIZE_ID KEY#       VALUE#28   VALUE#29
    ---------- ---------- ---------- ---------- ---------- ----------
             1 1#                  1 11#        aa0        null
             1 1#                  2 12#        aa1        null
             1 1#                  3 13#        null       aa2--以下为我表里的测试数据
    SQL> select * from t1; STRUCT_ID STRUCT_NAM
    ---------- ----------
             1 1#
             2 2#
             3 3#SQL> select * from t2;   SIZE_ID KEY#        STRUCT_ID
    ---------- ---------- ----------
             1 11#                 1
             2 12#                 1
             3 13#                 1
             4 14#                 2
             5 15#                 2
             6 16#                 2已选择6行。SQL> select * from t3;  SIZE_CID VALUE#        SIZE_ID       C_ID
    ---------- ---------- ---------- ----------
             1 aa0                 1         28
             2 aa1                 2         28
             3 aa2                 3         29
             4 aa3                 4         29SQL> select * from ccc;      C_ID C_NAME
    ---------- ----------
            28 cc1
            29 cc2
            30 cc3
            31 cc4
    --在语句里好像没用到ccc这张表
    另外 我的t3表里内容没你多 c_id只有28和29两条记录 所以我的查询结果只有#VALUE28和#VALUE29两列 没有你要求的#VALUE30和#VALUE31两列 你照样子给select再添加上两个case语句列就可以了
      

  2.   

    http://topic.csdn.net/u/20100306/15/fd92ad99-503f-499b-bd76-7d865ab69a9d.html?16890呵呵 你发了两次同样贴哦
      

  3.   


    结果在那个帖子已经回了,在copy一遍吧
    --用过程吧,row_col 
    create or replace procedure row_col( 
    v_cirsor out sys_refcursor 
    ) is 
    sqlstr varchar2(4000); 
    cursor mycursor is select ', sum(decode(car_id,'||car_id||',measure_value,0))'||'"'||car_id||'" ' c2 from 表 group by car_id; 
    r1 mycursor%rowtype; 
    begin 
      sqlstr :='select size_id '; 
      open mycursor; 
          loop 
            fetch mycursor into r1;        
            exit when mycursor%notfound; 
            sqlstr:=sqlstr || r1.c2;        
          end loop; 
      close mycursor; 
      sqlstr:=sqlstr||' from result3 group by size_id order by size_id '; 
      open v_cirsor for sqlstr; 
    end row_col; 
    根据你的数据,做了下测试,这个可以实现。