我有#Temp2
,其中包含列:
Math_Text, Science_Text, Physics_Text, Title
我需要运行以下查询:
update t
set CombinedText = t2.Title + '_Text'
from #Temp1 t
inner #Temp2 t2 on t2.Id = t.Id
例如,当我运行它时,我看到CombinedText ='Math_Text',但我需要该列下的实际值。我能做什么?谢谢!
EDIT1:
declare @sql nvarchar(max) = 'update t
set CombinedText = t2.Title + ''_Text''
from #Temp1 t
inner #Temp2 t2 on t2.Id = t.Id
'
exec sp_executesql @sql
t2不能正常工作。标题停留而变为其实际值。
EDIT2:
set CombinedText = c.[t2.Title+''_Text'']
也不起作用
答案 0 :(得分:0)
这是一个非常糟糕的数据设计。您应该将“文本”列放在单独的行中,而不是在列中。
考虑到这一点,您可以这样做:
update t
set CombinedText = v.txt
from #Temp1 t inner join
#Temp2 t2
on t2.Id = t.Id cross apply
(select v.*
from (values ('Math', Math_Text), ('Science', Science_Text), ('Physics', Physics_Text)
) v(title, txt)
where v.title = t2.title
);
您还可以使用一个巨大的case
表达式。