2011-01-04 3 views
1

얘들 아 내가 테이블이 표 A오라클 SQL 쿼리 monthwise보고에 대한

----- 
    A 
----- 
S_DATE 
DUR 
VIEWS 
AMOUNT 

같은 컬럼 데이터를 가지고 라는이 DateWise입니다 다음과 같은 행이 있습니다.

20101023 12 1 10000.0 
20101101 2 4 200.0 
20101114 4 5 -9 
20101201 6 10 150.0 
20101219 1 12 130.0 

내 요구 사항은 내가 monthwise * 보고서를 않는 SQL 쿼리를 작성하려는 것입니다 *. 예를 들어 webGUI에서 월의 드롭 다운을 DEC으로 선택하고 연도를 으로 선택할 경우 2010 년 11 월 1 일부터 2010 년 12 월 1 일까지에서 DUR, VIEWS 및 AMOUNT의 합계를 표시해야합니다. 어떻게해야하는지에 대한 아이디어.

DEC2010에 대한 결과는

**DEC2010 12 19 341** 

답변

3

아래이 (?! 인해 귀하의 요구 사항 11 월 첫 날은 11 월과 12 월 월간 보고서 모두에있을 것입니다에 비록 물론) 작동하는 것처럼해야한다 :

SQL> VARIABLE p_months VARCHAR2(3); 
SQL> VARIABLE p_year NUMBER; 
SQL> EXEC :p_months := 'DEC'; :p_year := 2010; 

PL/SQL procedure successfully completed. 

SQL> WITH tableA AS (
    2 SELECT DATE '2010-10-23's_date , 12 dur, 1 views, 10000.0 amount FROM DUAL 
    3 UNION ALL SELECT DATE '2010-11-01', 2, 4 , 200.0 FROM DUAL 
    4 UNION ALL SELECT DATE '2010-11-14', 4, 5 , -9 FROM DUAL 
    5 UNION ALL SELECT DATE '2010-12-01', 6, 10, 150.0 FROM DUAL 
    6 UNION ALL SELECT DATE '2010-12-19', 1, 12, 130.0 FROM DUAL 
    7 ) 
    8 SELECT :p_months||:p_year month, 
    9   SUM(dur), 
10   SUM(views), 
11   SUM(amount) 
12 FROM tableA 
13 WHERE s_date >= add_months(to_date(:p_months||:p_year, 'MONYYYY'), -1) 
14  AND s_date < to_date(:p_months||:p_year, 'MONYYYY') + 1; 

MONTH  SUM(DUR) SUM(VIEWS) SUM(AMOUNT) 
---------- ---------- ---------- ----------- 
DEC2010   12   19   341 
+0

감사합니다. vincent에서 trunc을 사용하고 있습니다. –