2011-01-04 10 views
1

Guysは、私はテーブルを持っているOracleのSQLクエリは、monthwiseレポートの

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

日付単位で、次の行を持っていテーブル内のデータとして列を持つと呼ばれます。

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を使用していました –