2014-12-10 251 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