我有一张桌子需要更新。在此表中,每个月都有一列。如果有人的开始日期是2015年2月13日,我需要使用计算中的一些数据更新二月份列。
因此,如果Start_Date是2015年2月17日,则需要填充名为FTEFeb的February列的值。如果Start_Date是2015年9月3日,则需要更新FTEMar列等...
我在考虑CASE语句是否有效,但SET列会根据“开始日期”中的值而有所不同。
我在网上看到了类似的东西,没有任何结果。 提前谢谢!
答案 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示例。