DB초짜입니다. 리포팅 관련해서 쿼리 질문 좀 드려요. 0 4 1,199

by 황희성 [2015.06.04 16:38:05]


테이블 데이터 구조가 대략이렇습니다.

1. 카테고리 테이블

코드 카테고리명
A1 의류/잡화
A2 홈데코
A3 악세서리
A5 가방

2. 상품 테이블

카테고리 매장코드 상품명 판매가격
       
       
       
       

3. 매장 테이블

매장코드 매장명
B1 매장1
B2 매장2
B3 매장3
B4 매장4

4. 판매 테이블

상품코드 매장코드 판매수량 공급가 부가세 판매일
           
           

이렇게 4개의 테이블에서 매출현황을 리포트해 주어야하데 원하는 형식이 좀 특이합니다.ㅜㅜ

(2015-04-05 매출통계)

구분 가방 장비 의류/잡화 홈데코 액세서리 일계 월계 년계
금액 부가세 금액 부가세 금액 부가세
상품 매장1                      
매장2                      
매장3                      
매장4                      
일계                      
월계                      
년계                      

어떻게 쿼리를 해야할지 도무지 감이 안잡힙니다. 본인이 만든건 아니고 기존에 있는 데이터를 가지고 리포팅만 뽑아달라고 요청이 들어왔는데. 완전 디비 초짜라.............

작은 조언도 저에겐 큰 힘이됩니다. 감사합니다.

by 아발란체 [2015.06.04 21:06:30]

소계/합계를 떠나 먼저 유사 형태로 SQL를 만드셔야 할 것 같은데,

01. 자료 구조(=테이블) 성격상 표측으로 되어 있는 부분을 표두 쪽으로 설정

02. 표두 일계/월계/년계 산출

03. 01/02를 통해 나온 테이블과 매장 테이블 조인하여 기존 결과 매장별 세분화

04. 최종 행단위 일계/월계/년계 산출

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

구체적 답을 얻고 싶으시다면 테이블별 샘플 데이타를 가상 테이블 형식(WITH AS [TABLE_NAME]...)으로 올려주시면 많은 분들이 도움을 드릴 수 있을 것 같습니다.


by 황희성 [2015.06.05 09:26:44]

답변감사합니다^^


by 마농 [2015.06.05 09:06:57]
WITH 조건 AS
(
SELECT 1 lv, '' gb, '2015' c, '20150405' c0, '20150405' c1, , '201504' c2, '2015' c3 FROM dual
UNION ALL SELECT 2, '일계', '20150405', '20150405', '20150405', 'x'     , 'x'    FROM dual
UNION ALL SELECT 3, '월계', '201504'  , '201504'  , 'x'       , '201504', 'x'    FROM dual
UNION ALL SELECT 4, '년계', '2015'    , '2015'    , 'x'       , 'x'     , '2015' FROM dual
)
SELECT NVL(a.gb, d.매장명) 구분
     , SUM(CASE WHEN b.판매일 LIKE c0||'%' AND c.카테고리 = 'A5' THEN b.공급가 END) "가방"
     , SUM(CASE WHEN b.판매일 LIKE c0||'%' AND c.카테고리 = 'A4' THEN b.공급가 END) "장비"
     , SUM(CASE WHEN b.판매일 LIKE c0||'%' AND c.카테고리 = 'A1' THEN b.공급가 END) "의류/잡화"
     , SUM(CASE WHEN b.판매일 LIKE c0||'%' AND c.카테고리 = 'A2' THEN b.공급가 END) "홈데코"
     , SUM(CASE WHEN b.판매일 LIKE c0||'%' AND c.카테고리 = 'A3' THEN b.공급가 END) "액세서리"
     , SUM(CASE WHEN b.판매일 LIKE c1||'%' THEN b.공급가 END) 일계_공급가
     , SUM(CASE WHEN b.판매일 LIKE c1||'%' THEN b.부가세 END) 일계_부가세
     , SUM(CASE WHEN b.판매일 LIKE c2||'%' THEN b.공급가 END) 월계_공급가
     , SUM(CASE WHEN b.판매일 LIKE c2||'%' THEN b.부가세 END) 월계_부가세
     , SUM(CASE WHEN b.판매일 LIKE c3||'%' THEN b.공급가 END) 년계_공급가
     , SUM(CASE WHEN b.판매일 LIKE c3||'%' THEN b.부가세 END) 년계_부가세
  FROM 조건 a
     , 판매 b
     , 상품 c
     , 매장 d
 WHERE b.상품코드 = c.상품코드
   AND b.매장코드 = d.매장코드
   AND b.판매일 LIKE a.c || '%'
 GROUP BY a.lv
     , NVL(a.gb, b.매장코드)
     , NVL(a.gb, d.매장명)
 ORDER BY a.lv
     , NVL(a.gb, b.매장코드)
;

 


by 황희성 [2015.06.05 09:27:01]

답변 감사합니다. 많은 참고가 되었습니다.^^

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입