2017-03-09 79 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...