我有如下表格,
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
我必须根据开始日期和结束日期在“价格”列中填写相同值的月份列(jan,feb,mar)。
例如。如果当前月份= jan 当前年份= 2017
1)年(startdate)= 2015,月(endate)= jan 然后仅在[jan]列中填写价格值,而不是在其他列中
2)年(startdate)= 2015,月(enddate)= mar 然后在[jan],[feb],[mar]
中填写价格值例如。当前月份= 2月份 当前年份= 2017
1)年(startdate)= 2017年,如果月份(startdate)= feb和month(endaate)= mar 然后单独填写[feb]和[mar],而不是[jan]
2)年(startdate)= 2017,月(startdate)= feb,month(endate)= feb 仅填写[feb]
答案 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...
答案 1 :(得分: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;
我只编写前两个月的代码,你可以通过用月号代替查询中的数字来完成其余的工作。