Sql server 如何编写此SQL Server语法以基于同一表中其他两列的值更新列

Sql server 如何编写此SQL Server语法以基于同一表中其他两列的值更新列,sql-server,tsql,date,case,Sql Server,Tsql,Date,Case,我正在使用SQL Server 2014,我需要编写一个SQL查询来更新DateDimension表中的一列(称为ToY) 以下是我的DateDimension表的摘录: Day Month Year Date ToY 1 11 2014 2014-11-01 NULL 2 11 2014 2014-11-02 NULL 我需要根据以下逻辑更新

我正在使用SQL Server 2014,我需要编写一个SQL查询来更新DateDimension表中的一列(称为ToY)

以下是我的DateDimension表的摘录:

Day      Month     Year         Date          ToY
 1         11       2014     2014-11-01       NULL
 2         11       2014     2014-11-02       NULL
我需要根据以下逻辑更新玩具专栏:

对于2014年11月至2015年10月之间的所有日期,玩具将为“玩具14-15”,对于2015年11月至2015年10月之间的所有日期,玩具将为“玩具15-16”

例如:如果月份=11,年份=2014,则玩具=玩具14-15

我尝试过这段SQL代码,但它不起作用:

 UPDATE DateDimension

 SET ToY = CASE Month+Year

 WHEN 112014 THEN 'ToY 14-15'

 ELSE ToY

 END
 GO
我搜索了一下,发现我可以把第三行写成: 当月份=11年=2014年时,则为“玩具14-15”

但在案件陈述之后,我一直坚持以下观点:

Set ToY = CASE ??

在这种情况下,可以使用布尔表达式,因此:

update DateDimension
set ToY = case when month = 11 and year = 2014 then 'ToY 14-15' 
          else ToY end
从2014-11年度获得“14-15”的逻辑尚不清楚。也许你每个月都要加上“4”

在任何情况下,这都给出了如何基于
列进行更新的想法:

update DateDimension
    set ToY = 'ToY ' + right('00' + cast(year as varchar(255)), 2) + '-' +
              right('00' + cast(month + 4 as varchar(255)), 2);

这使用了一些函数,但希望能让我的想法非常清楚:

UPDATE DateDimension

SET ToY = 'ToY ' + 
    CONVERT(char(2),DATEADD(month,-10,[Date]),12) + '-' +
    CONVERT(char(2),DATEADD(month,2,[Date]),12)
DATEADD(月-10,
)-对于11月之前的任何日期,将此日期移到去年。
DATEADD(月,2,
-对于10月之后的任何日期,将此日期移到明年。总之,它们可以选择去年和今年(对于11月之前的日期),也可以选择今年和明年

CONVERT(char(2),,12)
-在
yymmdd
中将日期转换为字符串-但是因为我要求使用
char(2)
,所以只保留前2个字符。

更新日期维度
UPDATE DateDimension
SET ToY = 
  CASE WHEN Month >= 11 then 
    'ToY '+cast( right(year,2) as varchar(2))+'-'+cast(right(year,2)+1 as varchar(2))
   WHEN Month < 11 then 
    'ToY '+cast( right(year,2)-1 as varchar(2))+'-'+cast(right(year,2) as varchar(2))

  ELSE ToY
  END
玩具套装= 当月份>=11时的情况 “玩具”+演员阵容(右(第二年)为varchar(第二年))+“-”+演员阵容(右(第二年)+1为varchar(第二年)) 当月份<11时 “玩具”+演员阵容(右(第二年)-1为瓦查尔(第二年))+“-”+演员阵容(右(第二年)为瓦查尔(第二年)) 其他玩具 结束

假设年份是数值,如果年份是字符串,则使用子字符串。

以及其他值的更新内容?能否添加一些额外的示例?“等等。”-你只给我们举了一个例子,希望我们根据它来辨别模式吗?@Damien_The_异教者我编辑了我的问题以使其更清晰。我编辑了我的问题以使逻辑更清晰。太棒了!效果很好!