database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 34041 게시물 읽기
No. 34041
총계 구하기...
작성자
차이
작성일
2008-07-07 09:13
조회수
2,737

SELECT MAX(CO) CO, LOG_DATE, Dept_cd,

 sum(dirf) DirF,

 sum(dirP) DirP,

 sum(dirM) DirM,

 sum(dirQ) DirQ,

 sum(dirA) DirA,

 sum(dirV) DirV,

 sum(dirS) DirS,

 sum(dirJ) DirJ,

 sum(dirR) DirR,

 sum(CNT) CNT

   FROM (

   select CO,Dept_cd, DIR01, Log_year, log_mont, log_days, Log_year||log_mont||log_days LOG_DATE,

   decode(DIR01, 'F',  CNT , 0) DirF,

   decode(DIR01, 'P',  CNT , 0) DirP,

   decode(DIR01, 'M',  CNT , 0) DirM,

   decode(DIR01, 'Q',  CNT , 0) DirQ,

   decode(DIR01, 'A',  CNT , 0) DirA,

   decode(DIR01, 'V',  CNT , 0) DirV,

   decode(DIR01, 'S',  CNT , 0) DirS,

   decode(DIR01, 'J',  CNT , 0) DirJ,

   decode(DIR01, 'R',  CNT , 0) DirR,

   cnt

 from st_log_mast

 where Log_year||log_mont||log_days  between  '20080701' AND  '20080704'

 AND Co='K1H'

) A

GROUP BY (A.LOG_DATE , A.DEPT_CD)

order by CO, LOG_DATE



해당 퀘리문은 각각의 디렉토리별 카운트를 업체별로 구분해서 뿌려 주도록 하는 퀘리문을 만들었습니다.


하지만 내가 원하는 결과는 처음에 총계를 보여주고자 합니다



즉 


업체명        디렉토리F,  디렉토리P ,  .................  총계

=====================================================

총계             50,      180,    190,   1000, ............   100212    <<<<  ====   이 라인을 삽입 하고자 합니다

업체명          20  ,     40 ,     50  ,    60 ,    .....      300

업체명          20  ,     40 ,     50  ,    60 ,    .....      300

업체명          20  ,     40 ,     50  ,    60 ,    .....      300

업체명          20  ,     40 ,     50  ,    60 ,    .....      300

업체명          20  ,     40 ,     50  ,    60 ,    .....      300

업체명          20  ,     40 ,     50  ,    60 ,    .....      300

...... 


업체명          20  ,     40 ,     50  ,    60 ,    .....      300







위 퀘리문은 총계 부분을 제외한 나머지 결과를 보여주는 퀘리문 입니다.


rollup groupping  함수를 잘 쓰면 될것 같은데 


사용하기 어렵네요 


고수님들의 도움 바랍니다 그럼 즐거운 하루되세요

이 글에 대한 댓글이 총 4건 있습니다.

질문이 2% 부족합니다.
원래 쿼리대로라면 co, log_date, dept_cd 가 결과에 보여야 하는데 딸랑 업체명만 보이네요.
총계가 전체계인지, 날짜별 계인지, 업체별 계인지, 날짜별/업체별 계인지 알려주세요.

마농(manon94)님이 2008-07-07 10:04에 작성한 댓글입니다.

sql 문에 오류가 있었던것 같네요.

좀더 이해를 쉽게 했어야 했는데 죄송합니다


다시 수정해서 반영한 sql 문 입니다.
( 기존것에서 날짜 받는부분은 없앴습니다. Dept_cd 가 업체명으로 이해하시면 됩니다.
 나머지것은 단순 조회조건으로 보시면 되고요.)

CO 부분은 법인 구분값으로 단순 조회 조건으로 보시면 될것입니다.

조회하고자 하는 것은 기간내에 각각의 디렉토리별 접근 누적 카운트 을 구하고자 하는것입니다.

원래 설계된 디비 값으로(중요한것만 정리 하면)


" CO(법인구분) , 업체명(Dept_cd),  디렉토리명(DIR01), 접속카운트(CNT) " 


이렇게 되어 있거든요



SELECT MAX(CO) CO,  Dept_cd,                        
 sum(dirf) DirF,                                      
 sum(dirP) DirP,                                      
 sum(dirM) DirM,                                      
 sum(dirQ) DirQ,                                      
 sum(dirA) DirA,                                      
 sum(dirV) DirV,                                      
 sum(dirS) DirS,                                      
 sum(dirJ) DirJ,                                      
 sum(dirR) DirR,                                      
 sum(CNT) CNT                                         
   FROM (                                              
   select CO,Dept_cd,                      
   decode(DIR01, 'F',  CNT , 0) DirF,                 
   decode(DIR01, 'P',  CNT , 0) DirP,                 
   decode(DIR01, 'M',  CNT , 0) DirM,                 
   decode(DIR01, 'Q',  CNT , 0) DirQ,                 
   decode(DIR01, 'A',  CNT , 0) DirA,                 
   decode(DIR01, 'V',  CNT , 0) DirV,                 
   decode(DIR01, 'S',  CNT , 0) DirS,                 
   decode(DIR01, 'J',  CNT , 0) DirJ,                 
   decode(DIR01, 'R',  CNT , 0) DirR,                 
   cnt                                                
 from st_log_mast                                     
 where Log_year||log_mont||log_days  between  ? AND  ?
  AND Co= ? 
) A                                                    
GROUP BY (A.DEPT_CD)                                
order by CO , DEPT_CD  


그리고 총계는 기간안에 업체들이 해당디렉토리 접근 갯수 전체계를 말하는것 입니다

차이님이 2008-07-07 15:29에 작성한 댓글입니다.
이 댓글은 2008-07-07 15:35에 마지막으로 수정되었습니다. Edit
이렇게 확인 해 보세요.

SELECT DECODE(GROUPING(A.DEPT_CD), 1, '총계', MAX(CO)) AS CO
... 중간생략 ...
GROUP BY ROLLUP(A.DEPT_CD)
ORDER BY GROUPING(A.DEPT_CD) DESC, CO, DEPT_CD

그리고 Tip 한가지...위의 SQL을 약간 간략하게 수 있습니다.

select 
   DECODE(GROUPING(A.DEPT_CD), 1, '총계', MAX(CO)) AS CO, Dept_cd,                      
   NVL(SUM(decode(DIR01, 'F',  CNT)), 0) DirF,                  
   NVL(SUM(decode(DIR01, 'P',  CNT)), 0) DirP,                  
   NVL(SUM(decode(DIR01, 'M',  CNT)), 0) DirM,                  
   NVL(SUM(decode(DIR01, 'Q',  CNT)), 0) DirQ,                  
   NVL(SUM(decode(DIR01, 'A',  CNT)), 0) DirA,                  
   NVL(SUM(decode(DIR01, 'V',  CNT)), 0) DirV,                  
   NVL(SUM(decode(DIR01, 'S',  CNT)), 0) DirS,                  
   NVL(SUM(decode(DIR01, 'J',  CNT)), 0) DirJ,                  
   NVL(SUM(decode(DIR01, 'R',  CNT)), 0) DirR,                  
   NVL(SUM(cnt), 0) AS cnt                                                 
 from st_log_mast                                     
 where Log_year||log_mont||log_days  between  ? AND  ?
  AND Co= ?
GROUP BY (A.DEPT_CD)                                
order by GROUPING(A.DEPT_CD) DESC, CO , DEPT_CD
성시현(finecomp)님이 2008-07-07 16:01에 작성한 댓글입니다.

답변 감사합니다 

해결되었씁니다 

좋은 하루 되세요 ^____^

차이님이 2008-07-07 17:45에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
34044여러서버에서 하나의 테이블을 중복없이 SELECT 하는 좋은방법이 없을까요? [1]
김동우
2008-07-07
2086
34043오라클 select 문 질문입니다. [1]
김대웅
2008-07-07
2084
34042테이블이 필드 순서 변경 가능한가요? [1]
짜집기
2008-07-07
1950
34041총계 구하기... [4]
차이
2008-07-07
2737
34040수불테이블 관련해서 조언좀 부탁드립니다. [2]
초보자
2008-07-07
3113
34038성시현님께 여쭤봅니다. [5]
김흥수
2008-07-05
1976
34037조인시 중복 제거요.. [1]
fell
2008-07-05
3292
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.026초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다