Sql server 如何编写此SQL Server语法以基于同一表中其他两列的值更新列
我正在使用SQL Server 2014,我需要编写一个SQL查询来更新DateDimension表中的一列(称为ToY) 以下是我的DateDimension表的摘录: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 我需要根据以下逻辑更新
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_异教者我编辑了我的问题以使其更清晰。我编辑了我的问题以使逻辑更清晰。太棒了!效果很好!