【问题标题】:Oracle SQL Query for monthwise report用于月度报告的 Oracle SQL 查询
【发布时间】:2011-06-03 09:45:48
【问题描述】:

伙计们,我有一个名为 A 的表格,其中列有

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

表A中的数据有以下几行,即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 *report* 的 SQL 查询。例如,从 webGUI 中,当我在月份的下拉列表中选择 DEC 并选择年份作为 2010 时。我需要创建显示从 2010 年 11 月 1 日到 2010 年 12 月 1 日的 DUR、VIEWS 和 AMOUNT 的总和。关于如何做到这一点的任何想法。

DEC2010 的结果应该如下所示

**DEC2010 12 19 341**

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-21
      • 2013-11-28
      • 1970-01-01
      • 2020-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多