마농님께.. 0 18 2,153

by 볼우물 [2008.09.01 15:12:11]


SELECT CARD_BANK_CODE                                                                                           
      , COUNT(CASE WHEN SUBSTR(ELEC_BILL_NUM,3,3) = ’000’                    
                    AND MGR_ORG = ’000’ THEN 1 END) A_CNT                    
      , COUNT(CASE WHEN SUBSTR(ELEC_BILL_NUM,3,3) <> ’000’                   
                    AND MGR_ORG = ’000’ THEN 1 END) B_CNT                    
      , COUNT(CASE WHEN SUBSTR(ELEC_BILL_NUM,3,3) = ’000’                    
                    AND MGR_ORG <> ’000’ THEN 1 END) C_CNT                   
      , NVL(SUM(CASE WHEN SUBSTR(ELEC_BILL_NUM,3,3) = ’000’                  
                      AND MGR_ORG = ’000’ THEN CARD_SETTLE_AMT END),0) A_AMT 
      , NVL(SUM(CASE WHEN SUBSTR(ELEC_BILL_NUM,3,3) <> ’000’                 
                      AND MGR_ORG = ’000’ THEN CARD_SETTLE_AMT END),0) B_AMT 
      , NVL(SUM(CASE WHEN SUBSTR(ELEC_BILL_NUM,3,3) = ’000’                  
                      AND MGR_ORG <> ’000’ THEN CARD_SETTLE_AMT END),0) C_AMT
   FROM CARD_MAN_TAB                                                                                             
  WHERE CARD_SETTLE_DATE BETWEEN ’20080831’ AND ’20080901’
  GROUP BY CARD_BANK_CODE

 

마농님이 가르쳐주신거 이렇게 정리를 했는데요..

이번엔 저기 000 말고 110, 140, 170, 185, 200의 값도 동시에 표시되게끔

짜라고 하네요..

참고로 110, 140... 이 숫자들은 SUBSTR(ELEC_BILL_NUM,3,3)의 값입니다.

똑같은 쿼리에다가 저 값만 더 넣어서 가져갔다가 혼났어요 -_-;;

이런 경우는 어떻게 해야 하죠?

그리고 오라클 공부할려면 좋은 책좀 추천해주세요..

이 사이트의 활용법도 좀...

이사님이 공부할 책값은 대준다고 하셨으니.. 책 좀 봐야할듯..

오라클10g 입문은 다 봤는데요...

말그대로 입문이에요 ;;

마농님 부탁드립니다~

 

 

결과

카드사

000

110

140

170

185

200

237

245

삼성(CARD_BANK_CODE)

A

금액A_AMT

 

 

 

 

 

 

 

 

건수A_CNT

 

 

 

 

 

 

 

 

B

금액B_AMT

 

 

 

 

 

 

 

 

건수B_CNT

 

 

 

 

 

 

 

 

C

금액C_AMT

 

 

 

 

 

 

 

 

건수C_CNT

 

 

 

 

 

 

 

 

 

결과가 이런식으로 나와야 해요..

그리고 카드사는 몇개 더 있어요..

 

전과 다른 점은 넘어오는 파라미터 값이 하나이기에 그 값과 비교해서 ABC로 나뉘었지만

이번에는 각 기관 코드별로 ABC로 나뉘는 점인데... 이걸 도무지 어떻게 해야 할지...

by finecomp [2008.09.01 15:21:58]
마농님은 아니지만...^^;
"이번엔 저기 000 말고 ~~"에서 000이라는 것이 무슨 컬럼의 값인지 남들이 어떻게 알까요?
원하는 결과값들을 보여주심이 더 이해에 도움이 될 수도 있을 듯 합니다.

by 솬님 [2008.09.01 15:24:46]
when
then
반복

by 볼우물 [2008.09.01 15:25:13]
그게 쿼리문이 짜져야 결과값이 나와요^^;;
000은 기관코드 값으로 SUBSTR(ELEC_BILL_NUM,3,3)의 값입니다.
값으로는 11개 정도 있어요.. 200이후로 더 있는데 생략했습니다.

by 볼우물 [2008.09.01 15:26:11]
WHEN THEN 반복한 쿼리를 가져갔는데 혼났어요..

by 웅 [2008.09.01 15:28:28]
왜 혼나셨나요? 이유를 알려주시던가요??

by 볼우물 [2008.09.01 15:31:46]
쿼리 무식하게 길어져서요.. 나중에 백만건넘게 자료 들어올텐데.. CASE문으로 컬럼 66개 만들어버리면 안나온대요 ;;;

by finecomp [2008.09.01 15:32:51]
그럼 WHEN THEN을 반복하는 것이 아니라 컬럼자체를 만들어내라는 것 아닌가요?
문제내주신 분과 어떤 결과 또는 방법을 원하시는 것인지 우선 커뮤니케이션을 원할히 하셔야 할 듯...^^;

예)
... 선략 ...
, COUNT(CASE WHEN SUBSTR(ELEC_BILL_NUM,3,3) = ’000’
AND MGR_ORG = ’000’ THEN 1 END) A_CNT_000
, COUNT(CASE WHEN SUBSTR(ELEC_BILL_NUM,3,3) = ’140’
AND MGR_ORG = ’000’ THEN 1 END) A_CNT_140
... 하략 ...
... ?

by 마농 [2008.09.01 15:38:58]
가장 간단한 해결책입니다.
SELECT card_bank_code, mgr_org, SUBSTR(elec_bill_num,1,3)
, COUNT(*)
, SUM(card_settle_amt)
FROM card_man_tab
GROUP BY card_bank_code, mgr_org, SUBSTR(elec_bill_num,1,3)

by finecomp [2008.09.01 15:41:14]
백만건 정도의 자료라면 Group By 시 Case when 위처럼 써서 컬럼 100개 정도 가져와도 안 죽고 가뿐하던데요...ㅡ.ㅡ;
이 정도가 성능이 안나온다면 쿼리만든 사람이 문제가 아니라 테이블설계 또는 인덱스설계 또는 데이터설계 등 암튼 설계쪽이 문제가 있는 거겠지요.

마농님의 답변처럼 row로 나타내란 말인지도 꼭 확인하시구요...^^;

by 솬님 [2008.09.01 15:46:54]
저거 레포팅 툴 사용하시는건가요?? 저런식으로 컬럼이 추가야 되야 되는거면
크로스탭으로 될것이고 진짜 저렇게 컬럼이 추가 추가라면 노가다 하셔야 될거 같은데요

by 볼우물 [2008.09.01 15:47:02]
문제를 내 주신건 아니고요.. 사이트 페이지 중에 하나인데요.. 아까는 검색시에 기관코드를 선택해서 뿌리는거라서 000자리에 파라미터 값 넣으면 해결됐는데 이번엔 파라미터 값을 주지 않고 날짜 기간 값만 주고요 기관코드별로 다 나타내야 하거든요... 아 그리고 공부해야할 책도 좀 추천해주시면 감사하겠습니다.

by 볼우물 [2008.09.01 15:50:31]
레포팅툴은 잘 모르겠네요.. 단지 토드로만 작업중입니다..

by 마농 [2008.09.01 15:54:49]
이전 질문엔 '000'인것과 아닌것으로 분류해서 a,b,c 로 분류했는데요.
지금은 요구사항이 달라졌습니다.
위의 표에 보이는 a,b,c의 정체는 무었일까요?
기관코드는 elec_bill_num의 앞 3자리인건 알겠는데 mgr_org는 뭘까요?

by 볼우물 [2008.09.01 15:59:14]
이전 것에서의 000은 파라미터 값이에요.. 검색시 조건에서 주는 값. 그것을 비교해서 elec_bill_num과 mgr_org값이 넘어온 파라미터 값과 같으면 A
elec_bill_num과같고 mgr_org와 다르면 B, 또 이와 반대면 C로 나뉘었습니다.
이번엔 파라미터 값이 없이 파라미터 조건이 11개인데요..
그 11개 모두를 한 화면에 출력하는 것입니다. elec_bill_num은 과세기관코드이고 mgr_org는 결제기관코드에요
그래서 A,B,C 과세기관분, 타행기관분, 타기관에서통보해온것으로 나뉩니다..

by 솬님 [2008.09.01 15:59:22]
제 짧은 지식으론 저렇게 할라면
when then 하셔야 할듯 ㅡㅡ;;

by 볼우물 [2008.09.01 16:13:21]
when then으로 하게 되면 총 66개의 컬럼이 만들어지게 됩니다. 그래서 대리님이 무식하게 하지말라고 하시는데 ;;;

by 솬님 [2008.09.01 16:16:01]
SUBSTR(ELEC_BILL_NUM,3,3) 값이 전부 컬럼으로 뿌려지게 하려면
당연히 distinct SUBSTR(ELEC_BILL_NUM,3,3) 의 갯수만큼 컬럼이 있어야 하자나요

by 볼우물 [2008.09.01 16:31:19]
substr(elec_bill_num,3,3)은 총 11개, 그리고 abc에 해당하는 건수와 금액이 총 6개.. 즉 66번 저 쿼리를 이용해서 컬럼을 만들어야 한다는 얘기인데... java파일에 그렇게 했더니.. 대리님이 지저분하다고... 한번 그룹을 묶어서 걸른 다음에 그 값을 다시 추출하는 식으로 하면 더 간략하게 될거라고 해주셨는데.. 저는 통 뭔말인지... select ~ from (Select ~ from)이런식으로 하라는 것 같긴한데..
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입