数据如下:序号 金额
1 100
2 120
3 130
4 200
5 200
6 500
. .
. .
由于数据量很大,但是列只有“序号”和“金额”2列。
能否通过SQL 语句把数据转换成如下格式,能保证在一张纸多打印一些信息。
序号 金额 序号 金额 序号 金额
1 100 3 130 5 200
2 120 4 200 6 500
1 100
2 120
3 130
4 200
5 200
6 500
. .
. .
由于数据量很大,但是列只有“序号”和“金额”2列。
能否通过SQL 语句把数据转换成如下格式,能保证在一张纸多打印一些信息。
序号 金额 序号 金额 序号 金额
1 100 3 130 5 200
2 120 4 200 6 500
一,先建立一个临时表,结构就是xh1,je1,xh2,je2,xh3,je3
二,遍历所有的记录,然后将记录按次序以行的方式加入到这个临时表中去.
--just do it
select a.id,a.name,b.id,b.name,c.id,c.name
from
(
(select rownum rn,id,name from (SELECT row_number() OVER(PARTITION BY trunc((id-1)/3) order by mod(id-1,3)) as rn,AA.* from AA) where rn=1) A
left JOIN
(select rownum rn,id,name from (SELECT ROW_NUMBER() OVER(PARTITION BY trunc((id-1)/3) order by mod(id-1,3)) as rn,AA.* from AA) where rn=2) B
ON A.RN=B.RN
left JOIN
(select rownum rn,id,name from (SELECT ROW_NUMBER() OVER(PARTITION BY trunc((id-1)/3) order by mod(id-1,3)) as rn,AA.* from AA) where rn=3) C
ON A.RN=C.RN)
2 416
3 740
4 989
5 1267
6 1275
7 1316
8 1503
9 2025
10 2110
11 2191
12 2200
13 2377
14 2505
15 2545
16 2553
17 2640
18 2729
19 2808
20 2817
21 3485
22 5704
23 6083
24 6729
25 6808
26 7134
27 7286
28 7299
29 7312
30 7392
31 8243
32 8499
33 8506
34 8815
35 9070
36 9078
37 9088
38 9096
39 9181
40 9199
41 9207
42 9308
43 9318
44 11821
45 11825
46 11839
47 13797
48 14151
49 15085
50 15305
51 15407
52 15421
53 15430
54 15582
55 16542
56 16820
57 18137
58 18147
59 18339
60 18347
61 18517
62 18782
63 19162
64 19334
65 19400
66 19414
67 19427
68 20040
69 20883
70 20892
71 20904
72 21372
73 21378
74 21455
75 21756
76 21766
77 22135
78 23145
79 24111
80 24124
81 24128
82 24130
83 24148
84 24316
85 24602
86 24626
87 25076
88 25454
89 26247
90 26257sql:
select sum(tt.n1) num,sum(tt.v1) money,sum(tt.n2) num,sum(tt.v2) money,sum(tt.n3) num,sum(tt.v3) money,
sum(tt.n4) num,sum(tt.v4) money,sum(tt.n5) num,sum(tt.v5) money,sum(tt.n6) num,sum(tt.v6) money,
sum(tt.n7) num,sum(tt.v7) money,sum(tt.n8) num,sum(tt.v8) money,sum(tt.n9) num,sum(tt.v9) money,
sum(tt.n10) num,sum(tt.v10) money,sum(tt.n11) num,sum(tt.v11) money,sum(tt.n12) num,sum(tt.v12) money,
sum(tt.n13) num,sum(tt.v13) money
from
(
select floor(t.n/13) n,decode(flag,2,t.n,0) n1,decode(flag,2,t.m,0) v1,decode(flag,3,t.n,0) n2,decode(flag,3,t.m,0) v2,
decode(flag,4,t.n,0) n3,decode(flag,4,t.m,0) v3,decode(flag,5,t.n,0) n4,decode(flag,5,t.m,0) v4,
decode(flag,6,t.n,0) n5,decode(flag,6,t.m,0) v5,decode(flag,7,t.n,0) n6,decode(flag,7,t.m,0) v6,
decode(flag,8,t.n,0) n7,decode(flag,8,t.m,0) v7,decode(flag,9,t.n,0) n8,decode(flag,9,t.m,0) v8,
decode(flag,10,t.n,0) n9,decode(flag,10,t.m,0) v9,decode(flag,11,t.n,0) n10,decode(flag,11,t.m,0) v10,
decode(flag,12,t.n,0) n11,decode(flag,12,t.m,0) v11,decode(flag,13,t.n,0) n12,decode(flag,13,t.m,0) v12,
decode(flag,1,t.n,0) n13,decode(flag,1,t.m,0) v13
from
(
select aa.n,aa.m,mod(aa.n,13)+1 flag
from aa
)t
)
tt
group by tt.n结果: NUM MONEY NUM MONEY NUM MONEY NUM MONEY NUM MONEY NUM MONEY NUM MONEY NUM MONEY NUM MONEY NUM MONEY NUM MONEY NUM MONEY NUM MONEY
1 1 348 2 416 3 740 4 989 5 1267 6 1275 7 1316 8 1503 9 2025 10 2110 11 2191 12 2200 0 0
2 14 2505 15 2545 16 2553 17 2640 18 2729 19 2808 20 2817 21 3485 22 5704 23 6083 24 6729 25 6808 13 2377
3 27 7286 28 7299 29 7312 30 7392 31 8243 32 8499 33 8506 34 8815 35 9070 36 9078 37 9088 38 9096 26 7134
4 40 9199 41 9207 42 9308 43 9318 44 11821 45 11825 46 11839 47 13797 48 14151 49 15085 50 15305 51 15407 39 9181
5 53 15430 54 15582 55 16542 56 16820 57 18137 58 18147 59 18339 60 18347 61 18517 62 18782 63 19162 64 19334 52 15421
6 66 19414 67 19427 68 20040 69 20883 70 20892 71 20904 72 21372 73 21378 74 21455 75 21756 76 21766 77 22135 65 19400
7 79 24111 80 24124 81 24128 82 24130 83 24148 84 24316 85 24602 86 24626 87 25076 88 25454 89 26247 90 26257 78 23145
此语句最终的结果是按照序号横向排列的,如何能调整成纵向啊。
原始数据状态:
ID NAME
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9
语句执行后,变为了
ID NAME ID NAME ID NAME
1 2 2 3 3 4
4 5 5 6 6 7
7 8 8 9
我想得到的效果是:
ID NAME ID NAME ID NAME
1 2 4 5 7 8
2 3 5 6 8 9
3 4 6 7由于对上述脚本的函数不熟,再请教一下。谢谢。
TO sleepzzzzz :
此语句最终的结果是按照序号横向排列的,如何能调整成纵向啊。
原始数据状态:
ID NAME
1 张1
2 张2
3 张3
4 张4
5 张5
6 张6
7 张7
8 张8
语句执行后,变为了
ID NAME ID NAME ID NAME
1 张1 2 张2 3 张3
4 张4 5 张5 6 张6
7 张7 8 张8
我想得到的效果是:
ID NAME ID NAME ID NAME
1 张1 4 张4 7 张7
2 张2 5 张5 8 张8
3 张3 6 张6 由于对上述脚本的函数不熟,再请教一下。谢谢。
表res_node数据:
res_id res_name
9207 Res-BJBMC4083-SNMP1
9308 Res-BJBMC4083-SNMP2
221319 Res-BJCMPCJ1-SNMP3
221331 Res-BJCMPCJ1-SNMP4
223897 Res-BJCMPCJ1-SNMP5
223845 Res-BJCMPCJ1-SNMP6
224236 Res-BJCMPCJ1-SNMP7
224487 Res-BJCMPCJ1-SNMP8
241587 Res-BJCMPCJ1-SNMP9 查询语句:
select a.id,a.name,b.id,b.name,c.id,c.name
from
(select rownum rn,id,name
from
(
select row_number() OVER(PARTITION BY trunc((rownum-1)/3) order by mod(rownum-1,3)) as rn,n.res_id id,res_name name
from res_node n
)
where rn=1
) a,(select rownum rn,id,name
from
(
SELECT row_number() OVER(PARTITION BY trunc((rownum-1)/3) order by mod(rownum-1,3)) as rn,n.res_id id,res_name name
from res_node n
)
where rn=2)b,(select rownum rn,id,name
from
(
SELECT row_number() OVER(PARTITION BY trunc((rownum-1)/3) order by mod(rownum-1,3)) as rn,n.res_id id,res_name name
from res_node n
)
where rn=3)c
where a.rn = b.rn
and b.rn = c.rn
查询结果: id name id name id name
9207 Res-BJBMC4083-SNMP1 9308 Res-BJBMC4083-SNMP2 221319 Res-BJCMPCJ1-SNMP3
221331 Res-BJCMPCJ1-SNMP4 223897 Res-BJCMPCJ1-SNMP5 223845 Res-BJCMPCJ1-SNMP6
224236 Res-BJCMPCJ1-SNMP7 224487 Res-BJCMPCJ1-SNMP8 241587 Res-BJCMPCJ1-SNMP9