2017-03-09 81 views
-1

我的表像之下,填充值

startdate ||enddate ||price|| jan|| feb|| mar 

2015-12-23 2017-01-31 223.3 

2015-01-01 2017-03-31  1.9 

2017-02-03 2017-03-23  5.99 

2017-02-01 2017-02-23  233 

我必須填寫當月列(一月,二月,三月),在「價格」列相同的值,基於開始和結束日期。

例如。櫃面如果當前月份=揚 當年= 2017

1)年(開始日期)= 2015,月(endate)=揚 然後填充價格值只在[揚]列未在其他列

2 )year(startdate)= 2015,month(enddate)= mar 然後在[jan],[feb],[mar]

填充價格值。櫃面如果當月=二月 當年= 2017年

1)年(開始日期)= 2017年,如果月(開始日期)=二月和月(endaate)=月 然後填寫[月]和[月]獨自一人,不是[月]

2)年(開始日期)= 2017年,月(開始日期)=月,月(endate)=二月 只填寫[月]

+0

您正在使用哪個數據庫平臺? – SqlZim

+0

我沒有遵循你的邏輯,請添加你想要的輸出。 – Stephen

回答

1

這是可以做到這樣的:

UPDATE 
    table_Name 
SET 
    jan = CASE WHEN DATEPART(yyyy, startdate) = DATEPART(yyyy, enddate) 
        AND 
        DATEPART(mm, startdate) <= 01 AND DATEPART(mm, endate) >= 01 
      THEN `price` 
      WHEN DATEPART(yyyy, startdate) != DATEPART(yyyy, enddate) 
        AND 
        DATEPART(mm, enddate) >= 01 
      THEN `price` 
      ELSE NULL END, 
    feb = CASE WHEN DATEPART(yyyy, startdate) = DATEPART(yyyy, enddate) 
        AND 
        DATEPART(mm, startdate) <= 02 AND DATEPART(mm, endate) >= 02 
      THEN `price` 
      WHEN DATEPART(yyyy, startdate) != DATEPART(yyyy, enddate) 
        AND 
        DATEPART(mm, enddate) >= 02 
      THEN `price` 
      ELSE NULL END; 

我只寫代碼前兩個月,你可以通過查詢與數月更換數做休息。

+0

感謝噸..這很好。 –

+0

@varsini我在查詢中犯了一個錯誤,只是更新它使用更新的一個! – Zeus

+0

是的,我已經在我的查詢中進行了更改,謝謝 –

1

使用CASE表達式爲每個月份的列:

SELECT StartDate, EndDate, Price, 
CASE WHEN {some condition = true} THEN Price ELSE NULL END AS Jan, 
CASE WHEN {some condition = true} THEN Price ELSE NULL END AS Feb, 
CASE WHEN {some condition = true} THEN Price ELSE NULL END AS Mar, 
...etc...