用于monthwise报表的Oracle SQL查询

用于monthwise报表的Oracle SQL查询,sql,oracle,Sql,Oracle,伙计们,我有一个名为a的表,它的列是 ----- A ----- S_DATE DUR VIEWS AMOUNT 表A中的数据有以下按日期排列的行 我的要求是,我想编写一个SQL查询,该查询不会生成monthwise*report*。例如,在webGUI中,我在下拉列表中选择月份为12月,选择年份为2010年。我需要创建并显示从2010年11月1日到2010年12月1日的DUR、视图和金额的总和。有没有关于如何做到这一点的想法 2010年12月的结果如下所示 **DEC2010 12 19

伙计们,我有一个名为a的表,它的列是

-----
  A
-----
S_DATE
DUR
VIEWS
AMOUNT
表A中的数据有以下按日期排列的行

我的要求是,我想编写一个SQL查询,该查询不会生成monthwise*report*。例如,在webGUI中,我在下拉列表中选择月份为12月,选择年份为2010年。我需要创建并显示从2010年11月1日到2010年12月1日的DUR、视图和金额的总和。有没有关于如何做到这一点的想法

2010年12月的结果如下所示

**DEC2010 12 19 341**

当然,由于您的要求,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
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