将Ids替换为一行中的相应文本值

时间:2011-07-26 14:57:35

标签: sql-server-2005

我有一行为我提供如下所示的值:

ClubbedValues
-----------------------------------------------------
561#557, 562#558, 563#559, 561#560, 562#560
581#578, 581#579, 581#580
561#557, 562#558, 562#559, 563#560

我有一个主表,我对这些id有文本值。例如:

Id     TextValue
-----------------------------------------------------
561    Value1
562    Value2
563    Value3
564    Value4
565    Value5

现在我想要以下输出:

ClubbedValues
-----------------------------------------------------
Value1#Value107, Value2#Value108, Value3#Value109 etc..

其中两个文本值都映射到主表中的某个位置。

我希望你能得到这个问题......

任何帮助将不胜感激。

谢谢。

1 个答案:

答案 0 :(得分:1)

您可以使用表变量和循环覆盖需要替换的所有值。

declare @T table(ClubbedValues varchar(max))
declare @Id int
declare @Value varchar(10)

-- Get the rows from YourTable that you need to process  
insert into @T
select ClubbedValues
from [your table]

select top 1 
  @Value = TextValue,
  @Id = Id
from [master table]
order by Id  

while @@rowcount > 0
begin
  update @T 
    set ClubbedValues = replace(ClubbedValues, cast(@Id as varchar(10)), @Value)

  select top 1 
    @Value = TextValue,
    @Id = Id
  from [master table]
  where Id > @Id
  order by Id  
end

select *
from @T