数据相应字段生成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)
