原始数据格式:
学校 班级 学号
A 1 01
A 1 02
A 1 03
A 2 01
A 2 02
A 2 03
B 1 01
B 1 02
B 1 03
B 2 01
B 2 02
......
(不超过50行数据)
========================================================================
目标数据格式:
学校:A B ......
班级:1 2 1 2 ......
学号:01 02 03 01 02 03 01 02 03 01 02 ...... (一共50列,无值时赋空)
列号 1 2 3 4 5 6 7 8 9 10 11 ...... 50
学校 班级 学号
A 1 01
A 1 02
A 1 03
A 2 01
A 2 02
A 2 03
B 1 01
B 1 02
B 1 03
B 2 01
B 2 02
......
(不超过50行数据)
========================================================================
目标数据格式:
学校:A B ......
班级:1 2 1 2 ......
学号:01 02 03 01 02 03 01 02 03 01 02 ...... (一共50列,无值时赋空)
列号 1 2 3 4 5 6 7 8 9 10 11 ...... 50
select from T1.xx1,T2.bj2,T.学号 from 原始表 T,(select distinct 学校 xx1 from 原始表) T1,select distinct 学校 xx2,班级 bj2 from 原始表) T2 where T.学校=T1.xx1(+) AND
T.学校=T2.xx2(+) AND T.班级=T2.bj2(+);没有经过验证,应该类似这样的
select T1.xx1,T2.bj2,T.学号 from 原始表 T,(select distinct 学校 xx1 from 原始表) T1,select distinct 学校 xx2,班级 bj2 from 原始表) T2 where T.学校=T1.xx1(+) AND
T.学校=T2.xx2(+) AND T.班级=T2.bj2(+);多了一个from
看一下decode的语法
用存储过程解决吧,何必为难SQL文呢?
顺便问一句,是不是那个老师来为难你的?
TYPE ORDERS WENTI
-------------------- -------------------- --------------------
A 1 1
A 1 2
A 1 3
A 2 1
A 2 2
A 2 3
B 1 1
B 1 2
B 1 3
=====================================================================================
结果表:
A B
1 2 1 2
01 02 03 01 02 03 01 02 03 01 02
先弄出一张表 这样反复插入大概50行
A B C
------ ------ ------
A 1 01
A 1 02
A 1 03
A 1 04
A 1 05
A 2 05
A 2 03
A 2 06
A 2 07
A 3 07
B 1 01
B 1 02
B 1 03
B 1 04
B 1 05
B 2 05
B 2 03
B 2 06
B 2 07
B 3 07
C 1 01
C 1 02
C 1 03
C 1 04
C 1 05
C 2 05
C 2 03
C 2 06
C 2 07
C 3 07
D 1 01
D 1 02
D 1 03
D 1 04
D 1 05
D 2 05
D 2 03
D 2 06
D 2 07
D 3 07
E 1 01
E 1 02
E 1 03
E 1 04
E 1 05
E 2 05
E 2 03
E 2 06
SQL写法:
1 select max(decode(ro,1,A,null)) as "1" from (select rownum ro,A,B,C from lpy order by A,B,C) a
2 union all
3 select max(decode(ro,1,B,null)) as "1" from (select rownum ro,A,B,C from lpy order by A,B,C) a
4 union all
5* select max(decode(ro,1,C,null)) as "1" from (select rownum ro,A,B,C from lpy order by A,B,C) a基本实现不了 但是格式你看是不是你要的?
PLSQL写法
declare
type rr is table of varchar2(2)
index by binary_integer;
aa rr;
bb rr;
cc rr;
dd rr;
nu number;
aaa long;
bbb long;
ccc long;
ddd long;
begin
-- nu:=10;
bbb:='School:';
ccc:='Class:';
ddd:='Number:';
select count(*) into nu from lpy;
nu:=20;
for i in 1..nu loop
select * into aa(i),bb(i),cc(i),dd(i) from (select rownum ro,A,B,C from lpy order by A,B,C) a where ro=i;
aaa:=aaa||chr(9)||aa(i);
bbb:=bbb||chr(9)||bb(i);
ccc:=ccc||chr(9)||cc(i);
ddd:=ddd||chr(9)||dd(i);
end loop;dbms_output.put_line(aaa);
dbms_output.put_line(bbb);
dbms_output.put_line(ccc);
dbms_output.put_line(ddd);
end;
/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
School: A A A A A A A A A A B B B B BB B B B B
Class: 1 1 1 1 1 2 2 2 2 3 1 1 1 1 12 2 2 2 3
Number: 01 02 03 04 05 05 03 06 07 07 01 02 03 04 05 05 03 06 07 07这个效果有点丑 但是 LZ你看看是要这种效果么?