根据日期更新某些列。解决此问题的最佳方法

时间:2015-04-14 14:48:32

标签: mysql sql

我有一张桌子需要更新。在此表中,每个月都有一列。如果有人的开始日期是2015年2月13日,我需要使用计算中的一些数据更新二月份列。

因此,如果Start_Date是2015年2月17日,则需要填充名为FTEFeb的February列的值。如果Start_Date是2015年9月3日,则需要更新FTEMar列等...

我在考虑CASE语句是否有效,但SET列会根据“开始日期”中的值而有所不同。

我在网上看到了类似的东西,没有任何结果。 提前谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用案例陈述。

对于您的查询,而不是在月份上执行CASE,只需编写一个案例来更新每个列,如果列不是您想要的月份,则可以将其设置为0,或者您的业务规则是什么。试试这个:

UPDATE myTable
SET 
  FTEJan = (CASE WHEN MONTH(startDate) = 1 THEN 1 ELSE 0 END),
  FTEFeb = (CASE WHEN MONTH(startDate) = 2 THEN 1 ELSE 0 END),
  FTEMar = (CASE WHEN MONTH(startDate) = 3 THEN 1 ELSE 0 END),
  FTEApr = (CASE WHEN MONTH(startDate) = 4 THEN 1 ELSE 0 END),
  FTEMay = (CASE WHEN MONTH(startDate) = 5 THEN 1 ELSE 0 END),
  FTEJun = (CASE WHEN MONTH(startDate) = 6 THEN 1 ELSE 0 END),
  FTEJul = (CASE WHEN MONTH(startDate) = 7 THEN 1 ELSE 0 END),
  FTEAug = (CASE WHEN MONTH(startDate) = 8 THEN 1 ELSE 0 END),
  FTESep = (CASE WHEN MONTH(startDate) = 9 THEN 1 ELSE 0 END),
  FTEOct = (CASE WHEN MONTH(startDate) = 10 THEN 1 ELSE 0 END),
  FTENov = (CASE WHEN MONTH(startDate) = 11 THEN 1 ELSE 0 END),
  FTEDec = (CASE WHEN MONTH(startDate) = 12 THEN 1 ELSE 0 END);

以下是SQL Fiddle示例。