2013-05-14 34 views
0

我的表是這樣的:當StartDate是一個固定的日期時,如何爲從StartDate到EndDate的列賦值2013年1月

Country Project InvCode InvName Site WorkLoad StartDate EndDate 
USA 1234 2020 Jane Box  101 20  2012-02-10 2013-04-15 
USA 1234 2020 Jane Box  102 35  2013-02-10 2013-07-15 
USA 2222 2140 James Smith 101 5 2012-10-10 2013-12-05 
USA 2222 2590 Susan Falco 410 12 2013-05-10 2015-12-20 
USA 2250 2140 James Smith 401 8 2013-04-01 2013-07-18 

我加4列的表格:StartYear,從起始日期和EndYear,EndMonth從結束日期StartMonth(希望他們會以書面查詢幫助)

StartYear StartMonth EndYear EndMonth 
2012 2  2013 5 
2013 2  2013 7 
2012 10 2013 12 
2013 5  2015 12 
2013 4  2013 7 

所需的輸出將如下所示。 我無法適應所有月份,但它應該從EndDate開始到最大月份年份。在我的表,我將通過2015年12月

country|Project|InvCode|INvName|Site|StartDate|EndDate|Jan-13|Feb-13|Mar-13|Apr-13|May-13|. 

USA|1234|2020|Jane Box |101|2012-02-10|2013-05-15|  20 20 20  20  0 
USA|1234| 2020|Jane Box |102|2013-02-10|2013-07-15|  0  35 35  35 35 
USA|2222|2140|James Smith|101|2012-10-10|2013-12-05|  5 5  5  5  5 
USA|2222| 2590|Susan Falco|410|2013-05-10|2015-12-20|  0 0  0   0 12 
USA|2250|2140|James Smith|401|2013-04-01|2013-07-18|  0 0  0  8 8 

當起始日期爲2013年1月之前必須從2013年1月列,開始與2013年1月通過的結束日期分配相同的值,例如,20各月,後EndDate通過max EndDate分配0。

當StartDate在2013年1月之後,將StartDate的月份前的月份分配爲0,並且StartDate中的月份開始月份通過EndDate分配相同的值,例如StartDate是Feb -2013年,截止日期爲2013年7月,工作量= 35,2013年1月將分配0值,從2013年2月至2015年7月,將分配35個值。 結束日期後,通過最大結束日期分配0。

我會感謝您的幫助!

回答

3

這是一個開始;你需要填寫列剩下的幾個月:

-- MySQL 
SELECT 
    Country, 
    Project, 
    InvCode, 
    InvName, 
    Site, 
    StartDate, 
    EndDate, 
    CASE WHEN 201301 BETWEEN DATE_FORMAT(StartDate, '%Y%m') AND DATE_FORMAT(EndDate, '%Y%m') 
    THEN WorkLoad 
    ELSE 0 END 'Jan-13', 
    CASE WHEN 201302 BETWEEN DATE_FORMAT(StartDate, '%Y%m') AND DATE_FORMAT(EndDate, '%Y%m') 
    THEN WorkLoad 
    ELSE 0 END 'Feb-13', 
... and so on through December 
FROM my_table 
ORDER BY whatever 

附錄我由當時的當前標籤(MySQL的)回答了這個,但後來發現,標題說:「SQL Server 2008中「(此後已被移至標籤)。

上面的日期「砍」在SQL Server 2008中會有所不同,但其餘部分應該是相同的。由於MySQL和SQL Server都支持YEARMONTH功能,下面的查詢,但它使每個CASE比原來的MySQL只味長,要麼數據庫上運行:

-- SQL Server AND MySQL 
SELECT 
    Country, 
    Project, 
    InvCode, 
    InvName, 
    Site, 
    StartDate, 
    EndDate, 
    CASE WHEN 201301 BETWEEN YEAR(StartDate)*100 + MONTH(StartDate) AND YEAR(EndDate)*100 + Month(EndDate) 
    THEN WorkLoad 
    ELSE 0 END 'Jan-13', 
    CASE WHEN 201302 BETWEEN YEAR(StartDate)*100 + MONTH(StartDate) AND YEAR(EndDate)*100 + Month(EndDate) 
    THEN WorkLoad 
    ELSE 0 END 'Feb-13', 
... and so on through December 
FROM my_table 
ORDER BY whatever 
+0

真棒答案。爲我節省了大量的時間和挫折。非常感謝你 – Mona 2013-05-14 19:44:57

+0

不客氣@Mona - 很高興爲你工作:) – 2013-05-14 19:46:18

相關問題