数据呼应字段生成head头,超难。高手来回答

数据相应字段生成head头,超难。。高手来回答原始数据格式:学校班级学号A101A102A103A201A202A203B101B102B10

数据相应字段生成head头,超难。。高手来回答
原始数据格式:
学校  班级  学号
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 
[最优解释]
sql 也能写 不过太刺激了
先弄出一张表 这样反复插入大概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
[其他解释]
AB
12123
0102030102030102030102



[其他解释]
A‘’‘’‘’‘’‘’B‘’‘’‘’‘’
1‘’‘’2‘’‘’1‘’‘’2‘’
0102030102030102030102

[其他解释]

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
=====================================================================================
结果表:
AB
1212
0102030102030102030102


[其他解释]
chr(9)