Tsql 使用case或T-SQL选择要返回的列数据

Tsql 使用case或T-SQL选择要返回的列数据,tsql,Tsql,我有一个T-SQL存储过程,它使用为简洁起见简化的merge语句更新表: merge into Table_ACT as act using (select s1, s2, s3, s4, s5, s6, s7, dbo.GetACTScheduleID(t.s1) as daily_schedule_id from dbo.RotaTmp t) as s on act.employeeid = s.employeeid when matched then update

我有一个T-SQL存储过程,它使用为简洁起见简化的merge语句更新表:

merge into Table_ACT as act
using (select s1, s2, s3, s4, s5, s6, s7, dbo.GetACTScheduleID(t.s1) as daily_schedule_id
       from dbo.RotaTmp t) as s on act.employeeid = s.employeeid

when matched then
    update set
    act.shiftcodeID = s.s1 .....qry continues after
这一切都很好,但我必须每天重复查询7次更改行:

act.shiftcodeID = s.s1 to act.shiftcodeID = s.s2 then act.shiftcodeID = s.s3 etc

我希望能够通过使用If或Case语句来选择要使用的“S”字段,但我无法确定将其放置在何处。

我猜您希望这样:

merge into Table_ACT as act
using (select s1, s2, s3, s4, s5, s6, s7, dbo.GetACTScheduleID(t.s1) as 
daily_schedule_id
   from dbo.RotaTmp t) as s on act.employeeid = s.employeeid

when matched then
update set
act.shiftcodeID = CASE WHEN <condition 1> THEN s.s1 
                       WHEN <condition 2> THEN s.s2
                       WHEN <condition 3> THEN s.s3
                       WHEN <condition 4> THEN s.s4
                       WHEN <condition 5> THEN s.s5
                       WHEN <condition 6> THEN s.s6
                       WHEN <condition 7> THEN s.s7
                       END
.....qry continues after

你想做什么还不清楚。你能发布一些示例数据吗?例如,目标表的一部分和源表的一部分,以及最终期望的结果。请阅读以获取改进问题的一些提示。使用适当的软件MySQL、Oracle、DB2等标记数据库问题是很有帮助的。。。和版本,例如sql-server-2014。语法和特征的差异通常会影响答案。请注意,tsql缩小了选择范围,但没有指定数据库。