2014-12-10 93 views
1

我需要做一周我的报告周的基础上,但我的周数应该从本月如何将日期转换为周数

这里的第一天开始就是我的样本数据:

report_date Vol 
01 nov 2014 23 
03 nov 2014 34 
16 nov 2014 56 
30 nov 2014 44 

期望输出

Week no Vol 
1   57 
2   56 
3   0 
4   44 

希望其明确

感谢

回答

0
select to_char(report_date, 'W'), sum(vol) 
from your_table 
group by to_char(report_date, 'W'); 

W¯¯周月(1-5)第1点开始在 月的第一天,第七结束。

+0

差不多:他要0空周 – 2014-12-11 03:22:10

1

由于所需输出包括“零”行,以及,假设您希望此报告在多个月的工作,以及:

WITH sample_data AS 
    (SELECT DATE '2014-11-01' AS report_date, 23 AS vol FROM DUAL 
UNION ALL SELECT DATE '2014-11-03', 34 FROM DUAL 
UNION ALL SELECT DATE '2014-11-16', 56 FROM DUAL 
UNION ALL SELECT DATE '2014-11-30', 44 FROM DUAL) 
,weeks AS 
    (SELECT report_month 
     ,TO_CHAR(ROWNUM) AS week_no 
    FROM (SELECT DISTINCT 
        TRUNC(report_date,'MM') AS report_month 
      FROM sample_data) 
    CONNECT BY LEVEL <= TO_NUMBER(TO_CHAR(LAST_DAY(report_month),'W'))) 
SELECT TO_CHAR(weeks.report_month,'Month') AS "Month" 
     ,weeks.week_no AS "Week no" 
     ,NVL(sum(sample_data.vol),0) AS "Vol" 
FROM weeks 
LEFT JOIN sample_data 
ON  weeks.report_month = TRUNC(report_date,'MM') 
AND weeks.week_no = to_char(report_date,'W') 
GROUP BY weeks.report_month, weeks.week_no ORDER BY 1,2; 

我们决定在每个月的周数通过使用LAST_DAY函数来源数据,并且我们执行分层查询(CONNECT BY LEVEL <= n)为每个月的每周生成一行。

预期输出应该是:

Month Week no Vol 
======== ======= === 
November 1  57 
November 2   0 
November 3  56 
November 4   0 
November 5  44