有张a表,如下:
a1 a2 a3
---------------------------------------
001 1 a
001 1 b
001 1 c
002 2 a
002 2 b
002 2 c
002 2 d
打开游标时如下展现
b1 b2 b3 b4 b5 b6 b7 b8
------------------------------------------
001 1 a b c
002 2 a b c d
如果a表中相同a1大于了6行,也只能在b表中显示6列(b3--b8),第七行或是以后的就不统计了。把a.a1的数据group写到b1中
a.a2是唯一标识,写到b.b2
a.a3写到b.b3,b.b.4....最多到b8(只写6列)
如果a.a1数据大于6行,则不统计
-----------------------------------------------------
请教各位,该怎么写?
a1 a2 a3
---------------------------------------
001 1 a
001 1 b
001 1 c
002 2 a
002 2 b
002 2 c
002 2 d
打开游标时如下展现
b1 b2 b3 b4 b5 b6 b7 b8
------------------------------------------
001 1 a b c
002 2 a b c d
如果a表中相同a1大于了6行,也只能在b表中显示6列(b3--b8),第七行或是以后的就不统计了。把a.a1的数据group写到b1中
a.a2是唯一标识,写到b.b2
a.a3写到b.b3,b.b.4....最多到b8(只写6列)
如果a.a1数据大于6行,则不统计
-----------------------------------------------------
请教各位,该怎么写?
SQL> SELECT A1 "B1",
2 A2 "B2",
3 MAX(DECODE(RN,1,A3,NULL)) "B3",
4 MAX(DECODE(RN,2,A3,NULL)) "B4",
5 MAX(DECODE(RN,3,A3,NULL)) "B5",
6 MAX(DECODE(RN,4,A3,NULL)) "B6",
7 MAX(DECODE(RN,5,A3,NULL)) "B7",
8 MAX(DECODE(RN,6,A3,NULL)) "B8"
9 FROM (
10 SELECT T1.*,
11 ROW_NUMBER() OVER(PARTITION BY A1,A2 ORDER BY A1,A2) RN
12 FROM TABLE_NAME T1
27 )
28 GROUP BY A1,A2
29 ;B1 B2 B3 B4 B5 B6 B7 B8
--- ---------- -- -- -- -- -- --
001 1 A B C
002 2 A B C D SQL>
create table fee
(
a1 varchar2(20)
,a2 number
,a3 varchar2(20)
);insert into fee values('001', 1, 'a');
insert into fee values('001', 1, 'b');
insert into fee values('001', 1, 'c');
insert into fee values('002', 2, 'a');
insert into fee values('002', 2, 'b');
insert into fee values('002', 2, 'c');
insert into fee values('002', 2, 'd');
insert into fee values('002', 2, 'e');
insert into fee values('002', 2, 'f');
insert into fee values('002', 2, 'g');
insert into fee values('002', 2, 'h');
insert into fee values('002', 2, 'i');
insert into fee values('002', 2, 'j');commit;select a1
,a2
,max(decode(rn, 1, a3)) b3
,max(decode(rn, 2, a3)) b4
,max(decode(rn, 3, a3)) b5
,max(decode(rn, 4, a3)) b6
,max(decode(rn, 5, a3)) b7
,max(decode(rn, 6, a3)) b8
from (
select a1
,a2
,a3
,dense_rank() over(partition by a1, a2 order by a3) rn
from fee
) x
group by a1, a2;
DROP TABLE a;
create table a( a1 varchar2(20),a2 INT,a3 varchar2(20));insert into a values('001', 1, 'a');
insert into a values('001', 1, 'a');
insert into a values('001', 1, 'c');
insert into a values('002', 2, 'a');
insert into a values('002', 2, 'b');
insert into a values('002', 2, 'c');
insert into a values('002', 2, 'd');
insert into a values('002', 3, 'e');
insert into a values('002', 3, 'f');
insert into a values('002', 3, 'g');
insert into a values('002', 3, 'h');
insert into a values('002', 3, 'i');
insert into a values('002', 3, 'j');
insert into a values('002', 3, 'k');
commit;SELECT A1 B1,
A2 B2,
MIN(DECODE(RN, 1, A3)) B3,
MIN(DECODE(RN, 2, A3)) B4,
MIN(DECODE(RN, 3, A3)) B5,
MAX(DECODE(RN, 4, A3)) B6,
MAX(DECODE(RN, 5, A3)) B7,
MAX(DECODE(RN, 6, A3)) B8
FROM (SELECT A1,
A2,
A3,
row_number() OVER(PARTITION BY A1, A2 ORDER BY A3) RN
FROM A) X
GROUP BY A1, A2;
/*
输出:
B1 B2 B3 B4 B5 B6 B7 B8
001 1 a a c
002 2 a b c d
002 3 e f g h i j
*/