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的值產生的一個動態查詢語句,動態執行郰可
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的值產生的一個動態查詢語句,動態執行郰可
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的值產生的一個動態查詢語句,動態執行郰可
姓名 课程名 成绩
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进行操作比较理想。
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)这样就可以了
http://www.cnoug.org/viewthread.php?tid=21713