表TABLE
line value
1 a
2 b
3 c
4 d
5 e
6 f
7 g
8 h
9 i寻求sql查询结果如下line value line value line value
1 a 2 b 3 c
4 d 5 e 6 f
7 g 8 h 9 i或者构造一个temp表也可以
line value
1 a
2 b
3 c
4 d
5 e
6 f
7 g
8 h
9 i寻求sql查询结果如下line value line value line value
1 a 2 b 3 c
4 d 5 e 6 f
7 g 8 h 9 i或者构造一个temp表也可以
CREATE TABLE t5 AS SELECT ROWNUM a,ROWNUM b FROM dual CONNECT BY ROWNUM<9;
SELECT * FROM t5;
SELECT MAX(A) A, MAX(B) B, MAX(C) B, MAX(D) D, MAX(E) E, MAX(F) F
FROM (SELECT DECODE(MOD(RN, 3), 1, A) A,
DECODE(MOD(RN, 3), 1, B) B,
DECODE(MOD(RN, 3), 2, A) C,
DECODE(MOD(RN, 3), 2, B) D,
DECODE(MOD(RN, 3), 0, A) E,
DECODE(MOD(RN, 3), 0, B) F,
CEIL(RN / 3) X
FROM (SELECT A, B, ROW_NUMBER() OVER(ORDER BY A) RN FROM T5))
GROUP BY X;
输出:
A B B D E F
1 1 2 2 3 3
4 4 5 5 6 6
7 7 8 8
max(decode(mod(line,3),1,value,null)) value_1,
max(decode(mod(line,3),2,line,0)) line_2,
max(decode(mod(line,3),2,value,null)) value_2,
max(decode(mod(line,3),0,line,0)) line_3,
max(decode(mod(line,3),0,value,null)) value_3,
from table
group by trunc((line-1)/3)
select max(decode(mod(line,3),1,line,0)) line_1,
max(decode(mod(line,3),1,value,null)) value_1,
max(decode(mod(line,3),2,line,0)) line_2,
max(decode(mod(line,3),2,value,null)) value_2,
max(decode(mod(line,3),0,line,0)) line_3,
max(decode(mod(line,3),0,value,null)) value_3,
from table
group by trunc((line-1)/3)max(decode(mod(line,3),1,line,0)) line_1,
max(decode(mod(line,3),1,value,null)) value_1,line,0这个0是什么意思?
value,null这个null又是什么意思
还有如果我还有一个其他的列,能不能再用其他的列group by?
就是如果mod(line,3)算出来等于1,就显示当前的line,否则显示0,然后再求MAX
比如说line=1时,显示就是1,如果是2或者5时,就是0后面的max(decode(mod(line,3),2,line,0)) line_2
就是mod(line,3)=2时,显示line,否则显示0下面的value也一样,只不过因为是字符型的,所要要赋个NULL,这样做MAX时,就会取出来正确的值
max(decode(mod(line,3),1,value,null)) value_1,
max(decode(mod(line,3),2,line,0)) line_2,
max(decode(mod(line,3),2,value,null)) value_2,
max(decode(mod(line,3),0,line,0)) line_3,
max(decode(mod(line,3),0,value,null)) value_3,
from table
group by trunc((line-1)/3)
好
它只是将同样的行归并取有效行。