1. 질문
제가 조회하고자 하는 쿼리 결과는 TOT_CNT 중 TOT_DSAFN_CNT의 비율이 일자별로 나타나고, INQ_L_CODE, INQ_M_CODE, INQ_CODE별로 소계가 나타나야 됩니다.
일자에 상관없이 비율은 나오게 했는데, 우측으로 일자별로 나타나게 하기 위해 DECODE를 사용하려고 하는데 문제가 됩니다.
비율의 소계를 구하기 위해서는 SUM을 먼저 한 다음 나눠줘야 정확한 값이 나오고, 먼저 나눈 다음 SUM한 결과는 정확한 결과가 아닙니다.
SUM(TOT_DSAFN_CNT)/SUM(TOT_CNT) = O
SUM(TOT_DSAFN_CNT/TOT_CNT) = X
그런데 DECODE문으로 INQ_DT 일자에 따라 보여줄 때 ... 어떻게 해야 오류가 안 날지 모르겠습니다;;
2. 쿼리
WITH INQ_TB AS (
SELECT '20140210' AS INQ_DT, 'A2111' AS INQ_CODE, 'A' AS INQ_L_CODE, 'A2' AS INQ_M_CODE, 15 AS TOT_CNT, 3 AS TOT_DSAFN_CNT FROM DUAL
UNION ALL SELECT '20140209', 'B5137', 'B', 'B5', 12, 3 FROM DUAL
UNION ALL SELECT '20140210', 'A2111', 'A', 'A2', 12, 3 FROM DUAL
UNION ALL SELECT '20140210', 'B3126', 'B', 'B3', 14, 4 FROM DUAL
UNION ALL SELECT '20140211', 'B3125', 'B', 'B3', 11, 3 FROM DUAL
UNION ALL SELECT '20140207', 'A2111', 'A', 'A2', 5, 1 FROM DUAL
)
SELECT INQ_L_CODE
, INQ_M_CODE
, INQ_CODE
, SUM(TOT_CNT) AS TOT_CNT
, SUM(TOT_DSAFN_CNT) AS TOT_DSAFN_CNT
, ROUND((SUM(TOT_DSAFN_CNT)/SUM(TOT_CNT))*100,1) AS TOT_DSAFN_RT
FROM INQ_TB
GROUP BY ROLLUP(INQ_L_CODE, INQ_M_CODE, INQ_CODE)
;
3. 원하는 결과. 노란색으로 칠해진 부분이 일자입니다. 해당하는 일자의 비율이 나타나게 쿼리 부탁드립니다.
INQ_L_CODE |
INQ_M_CODE |
INQ_CODE |
TOT_CNT |
TOT_DSAFN_CNT |
TOT_DSAFN_RT |
01 |
02 |
03 |
04 |
05 |
06 |
07 |
08 |
09 |
10 |
11 |
12 |
A |
A2 |
A2111 |
32 |
7 |
21.90% |
|
|
|
|
|
|
|
|
|
|
|
|
A |
A2 |
소계 |
32 |
7 |
21.90% |
|
|
|
|
|
|
|
|
|
|
|
|
A |
소계 |
|
32 |
7 |
21.90% |
|
|
|
|
|
|
|
|
|
|
|
|
B |
B31 |
B3125 |
11 |
3 |
27.30% |
|
|
|
|
|
|
|
|
|
|
|
|
B |
B31 |
B3126 |
14 |
4 |
28.60% |
|
|
|
|
|
|
|
|
|
|
|
|
B |
B31 |
소계 |
25 |
7 |
28% |
|
|
|
|
|
|
|
|
|
|
|
|
B |
B51 |
B5137 |
12 |
3 |
25% |
|
|
|
|
|
|
|
|
|
|
|
|
B |
B51 |
소계 |
12 |
3 |
25% |
|
|
|
|
|
|
|
|
|
|
|
|
B |
소계 |
|
37 |
10 |
27% |
|
|
|
|
|
|
|
|
|
|
|
|
합계 |
|
|
69 |
17 |
24.60% |
|
|
|
|
|
|
|
|
|
|
|
|
|