伙计们我有一个名为 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
我的要求是我想写一个按月 * 报告 *的SQL查询。例如,从webGUI,当我选择月份下拉列表为 DEC 并选择年份为 2010 。我需要创建显示DUR,VIEWS和AMOUNT的总和,从2010年11月1日到2010年12月1日。想知道怎么做。
DEC2010的结果应如下所示
**DEC2010 12 19 341**
答案 0 :(得分: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