2012-03-16 4 views
6

나는 내가있을 것으로 예상하는 것은 다른 쿼리오라클 총계 열 및 행

STATUS   R1 R2 R3 R4 R5 R6 R7 R8 R9 
---------------------------------------------------- 
ACCEPTED  322 241 278 473 575 595 567 449 605 
ADECUACIONES 0 0 0 0 2 0 1 0 50 
AET    0 0 2 0 0 0 0 0 11 
EXECUTED  0 80 1 18 9 57 34 30 20 
IN PROCESS  0 0 0 0 0 4 25 2 112 
FREQ   0 55 2 76 25 117 7 73 48 
INSTALL   1 4 1 10 5 14 2 13 62 
WO INSTALL  9 2 51 24 143 17 15 59 16 
WOT VL   0 1 0 0 1 0 0 0 0 
OTHER   22 7 20 28 44 30 6 6 109 
PROG   1 0 1 0 0 2 3 0 0 
PTE PROG  0 5 0 0 0 0 3 19 93 
TMX    0 0 0 28 4 8 11 3 14 
PROJ   0 1 12 26 13 8 0 2 4 

에서 결과로이 테이블이이

STATUS   R1 R2 R3 R4 R5 R6 R7 R8 R9 TOTAL 
---------------------------------------------------------- 
ACCEPTED  322 241 278 473 575 595 567 449 605 4105 
ADECUACIONES 0 0 0 0 2 0 1 0 50 53 
AET    0 0 2 0 0 0 0 0 11 13 
EXECUTED  0 80 1 18 9 57 34 30 20 249 
IN PROCESS  0 0 0 0 0 4 25 2 112 143 
FREQ   0 55 2 76 25 117 7 73 48 403 
INSTALL   1 4 1 10 5 14 2 13 62 112 
WO INSTALL  9 2 51 24 143 17 15 59 16 336 
WOT VL   0 1 0 0 1 0 0 0 0 2 
OTHER   22 7 20 28 44 30 6 6 109 272 
PROG   1 0 1 0 0 2 3 0 0 7 
PTE PROG  0 5 0 0 0 0 3 19 93 120 
TMX    0 0 0 28 4 8 11 3 14 68 
PROJ   0 1 12 26 13 8 0 2 4 66 
TOTAL   355 396 368 683 821 852 674 656 1144 5949 

내가 grouping()rollup()와 함께 놀았 던, 하지만 난 항상 중복 행과 원치 않는 null 값을 얻는다.

답변

5

문제가 있으면 grouping_id 기능이 도움이 될 것입니다.

는 (당신은 GROUPING_ID (COL)를 선택뿐만 아니라 (COL1, COL2, COL3, 등) GROUPING_ID 수)

그러나 귀하의 경우는 간단합니다.

그것은 같은 것입니다 : A는 귀하의 경우 상태입니다

drop table fg_test_group; 
create table fg_test_group (a number, b number, c number, d number); 

insert into fg_test_group values (1, 2, 3, 4); 
insert into fg_test_group values (2, 2, 3, 4); 
insert into fg_test_group values (3, 2, 3, 4); 


select nvl(to_char(a), 'total') as a , sum(b), sum(c), sum(d), grouping_id(a) 
from fg_test_group 
group by rollup (a) 
; 

.

+0

감사합니다, 당신의 대답은 올바른 방향으로 나를 가리켰습니다. 나는 원하는 결과를 얻었습니다. 다시 감사합니다!! –

+0

당신은 환영합니다. –

+0

행 현명한 총계에 대해 – Lijo

2
CREATE TABLE TEST1 (STATUS VARCHAR2(10), R1 NUMBER, R2 NUMBER, R3 NUMBER); 
INSERT INTO TEST1 VALUES ('ACCEPTED', 322,241,278); 
INSERT INTO TEST1 VALUES ('EXECUTED', 0, 80, 1); 
INSERT INTO TEST1 VALUES ('FREQ', 0, 55, 2); 
COMMIT; 


select NVL(TO_CHAR(STATUS), 'total') as STATUS ,SUM(R1) R1, SUM(R2) R2 , SUM(R3) R3, SUM(R1+R2+R3) 
from TEST1 
group by rollup (STATUS) 
; 


STATUS   R1 R2 R3 SUM(R1+R2+R3) 

ACCEPTED  322 241 278 841 

EXECUTED  0 80 1 81 

FREQ   0 55 2 57 

total   322 376 281 979