DECLARE SQL VARCHAR2(8000)
SQL:='SELECT f1,'
SELECT SQL||'max((CASE FCLASS WHEN '''||f2||'''THEN f2  ELSE  0 END )) AS '''||f2||
''','INTO SQL FROM  ( SELECT DISTINCT f2 AS f2 FROM tablename  ) A;
SQL:=LEFT(@SQL,LEN(@SQL)-1)||' FROM tablename group by f1;利用SELECT的值產生的一個動態查詢語句,動態執行郰可

解决方案 »

  1.   

    DECLARE SQL VARCHAR2(8000)
    SQL:='SELECT f1,'
    SELECT SQL||'max((CASE FCLASS WHEN '''||f2||'''THEN f3  ELSE  0 END )) AS '''||f2||
    ''','INTO SQL FROM  ( SELECT DISTINCT f2 AS f2 FROM tablename  ) A;
    SQL:=LEFT(@SQL,LEN(@SQL)-1)||' FROM tablename group by f1;利用SELECT的值產生的一個動態查詢語句,動態執行郰可
      

  2.   

    你是想实现这个功能吗:表A
    姓名  课程名   成绩
    01    英语    90
    01    数学    90
    02    英语    80
    02    数学    80
    03    英语    70
    03    数学    70
    转换成 表B:
    姓名  课程名1  课程名2
    01     90    90
    02     80    80
    03     70    70如果仅通过显示成表B的格式,我想不太容易,还是先创建一个表B的临时表,再能过一段程序将表A中的数据转入表B中,然后对表B进行操作比较理想。
      

  3.   

    create table qxjtest(f1 varchar2(20),f2 varchar2(20),f3 varchar2(20));insert into qxjtest values ('01','a','1');
    insert into qxjtest values ('01','b','3');
    insert into qxjtest values ('01','c','5');
    insert into qxjtest values ('02','a','11');
    insert into qxjtest values ('02','b','33');
    insert into qxjtest values ('02','c','55');
    insert into qxjtest values ('03','a','111');
    insert into qxjtest values ('03','b','333');
    insert into qxjtest values ('03','c','555');
    select * from qxjtest;
    select * from (
    select f1,f3 as a,lead(f3,1) over (order by f1) as b, lead(f3,2) over (order by f1) as c
    from qxjtest )
    where length(c)=to_number(f1)这样就可以了
      

  4.   

    那是一定的,如果你连Select 后的字段名都不想写的话,那你是怎么都出不来的
      

  5.   

    行列轉換:
    http://www.cnoug.org/viewthread.php?tid=21713
      

  6.   

    select f1,sum(decode(f2,'a',f3)) a,sum(decode(f2,'b',f3)) b,sum(decode(f2,'c',f3)) c from tablename group by f1;