1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | 안녕하세요! 아래와 같은 SQL을 작성하고 사진과 같은 결과가 나왔는데 혹시 여기서 특정 조건, 예를 들어 사진속의 SEQ_NO 가 0136인 항목(1번째줄)에는 ROW_NUMBER()를 부여하지 않고 공백처리 같은게 가능한가요? SELECT ROW_NUMBER() OVER(PARTITION BY A.REP_SHOP ORDER BY A.REP_SHOP) NUM, DECODE(A.REP_SHOP, '0' , 0, '1' , 1, '2' , 2, '3' , 3, '4' , 4) REP_SHOP, MIN (C.SEQ_NO) SEQ_NO, B.EXTRA_S_8 SHOP_NAME, SUM (A.SALE_AMT) SALE_TARGET, SUM (A.REAL_SALE_NOR) REAL_SALE_NOR, SUM (A.REAL_SALE_GI) REAL_SALE_GI, SUM (A.REAL_SALE_NOR) + SUM (A.REAL_SALE_GI) DAY_REAL_SALE_AMT, SUM (A.MON_REAL_SALE_NOR) MON_REAL_SALE_NOR, SUM (A.MON_REAL_SALE_GI) MON_REAL_SALE_GI, SUM (A.ON_REAL_SALE_AMT) ON_REAL_SALE_AMT, SUM (A.MON_REAL_SALE_NOR) + SUM (A.MON_REAL_SALE_GI) TTL_REAL_SALE_AMT, NVL( SUM (TTL_REAL_SALE_AMT), 0) / DECODE( SUM (A.SALE_AMT), 0, NULL , SUM (A.SALE_AMT)) * 100 ACHIEVE_PER, SUM (A.PRE_REAL_SALE_NOR) PRE_REAL_SALE_NOR, SUM (A.PRE_REAL_SALE_GI) PRE_REAL_SALE_GI, SUM (A.PRE_REAL_SALE_NOR) + SUM (A.PRE_REAL_SALE_GI) PRE_REAL_SALE_AMT, SUM (A.PRE_MON_REAL_SALE_NOR) PRE_MON_REAL_SALE_NOR, SUM (A.PRE_MON_REAL_SALE_GI) PRE_MON_REAL_SALE_GI, SUM (A.ON_PRE_REAL_SALE_AMT) ON_PRE_REAL_SALE_AMT, SUM (A.PRE_MON_REAL_SALE_NOR) + SUM (A.PRE_MON_REAL_SALE_GI) TTL_PRE_REAL_SALE_AMT, NVL(( SUM (A.TTL_REAL_SALE_AMT) - SUM (A.TTL_PRE_REAL_SALE_AMT)), 0) / DECODE( SUM (A.TTL_PRE_REAL_SALE_AMT), 0, NULL , SUM (A.TTL_PRE_REAL_SALE_AMT)) * 100 INCREASE_PER, SUM (A.TTL_REAL_SALE_AMT) / 26 AVG_SALE_AMT, SUM (A.TTL_PRE_REAL_SALE_AMT) / 26 AVG_PRE_SALE_AMT, MAX (A.BIGO) BIGO FROM SHOPLIST A, CLIENTINFO B, SHOPGROUP C WHERE B.DIVISION_CD = '0' AND B.CLIENT_GU = 'M' AND B.CLIENT_CD = A.SHOP_CD AND C.DIVISION_CD = '0' AND A.SHOP_CD = C.CLIENT_CD AND C.SHOPGROUP_CD = '8900' AND C.SHOPGROUP_GU = '0' GROUP BY B.EXTRA_S_8, A.REP_SHOP ORDER BY A.REP_SHOP ASC , MIN (C.SEQ_NO) ASC |
1. 정렬 기준 오류
- 오류 : PARTITION BY a.rep_shop ORDER BY a.rep_shop
- 수정 : PARTITION BY a.rep_shop ORDER BY MIN(c.seq_no)
2. 그룹 기준 모호
- MIN(c.seq_no) 를 하고 있는데?
- c.seq_no 를 GROUP BY 에 포함시키고 MIN 을 빼도 결과가 같을 것 같은데? 어떤가요?
3. 결과에 대한 설명 부족 1
- 0136 이라는 특정 코드에 대해서 널처리를 하는건가요?
- 제일 첫번째 코드에 대해서 널처리를 하는건가요?
- 만약 첫번째라고 한다면? 0136 하나만인지? 0150, 0200 도 해당되는 것인지?
4. 결과에 대한 설명 부족 2
- 널처리를 한다면? 나머지 부분은 어떤식으로 출력이 되야 하는지?
- null, 2, 3, 4, 5, ... 인지?
- null, 1, 2, 3, 4, ... 인지?
1 2 3 4 5 6 7 8 9 10 11 | SELECT DECODE( MIN (c.seq_no), '0136' , null , ROW_NUMBER() OVER(PARTITION BY a.rep_shop ORDER BY NULLIF ( MIN (c.seq_no), '0136' )) ) num, -- Decode 가 필요한지 의문? -- DECODE(a.rep_shop, '0', 0, '1', 1, '2', 2, '3', 3, '4', 4) rep_shop, a.rep_shop, -- Decode 를 NullIf 로 대체 -- NVL(SUM(a.ttl_real_sale_amt), 0) / DECODE(SUM(a.sale_amt), 0, NULL, SUM(a.sale_amt)) * 100 achieve_per, NVL( SUM (a.ttl_real_sale_amt), 0) / NULLIF ( SUM (a.sale_amt), 0) * 100 achieve_per, |