简体   繁体   English

SQL Server:使用查找其他表替换字段中的值

[英]SQL Server: Replace values in field using lookup other table

Let's say I have below table script 假设我有下面的表格脚本

DECLARE @result TABLE
   (
    [ID] Int
   ,[Data] Varchar(500)
   )
DECLARE @codes TABLE
   (
    [ID] Varchar(500)
   ,[FullNames] Varchar(500)
   )
INSERT   INTO @result
         SELECT   1
                 ,'[A]-[B]'
INSERT   INTO @result
         SELECT   2
                 ,'[D]-[A]'
INSERT   INTO @result
         SELECT   3
                 ,'[A]+[C]'

INSERT   INTO @codes
         SELECT   'A'
                 ,'10'
INSERT   INTO @codes
         SELECT   'B'
                 ,'20'
INSERT   INTO @codes
         SELECT   'C'
                 ,'30'
INSERT   INTO @codes
         SELECT   'D'
                 ,'40'

SELECT * FROM @result
SELECT * FROM @codes

Output of those are as below: @result 这些的输出如下:@result

ID  Data
--  -------
1   [A]-[B]
2   [D]-[A]
3   [A]+[C]

@codes @codes

ID  FullNames
--  -------
A   10
B   20
C   30
D   40

Now I want output as below also: 现在我还希望输出如下:

ID  Data
--  -----
1   10-20
2   40-10
3   10+30

Please help me. 请帮我。 Please note: Data columns also contains ([A]-[B]+[D])*[C] 请注意:数据列还包含([A]-[B] + [D])* [C]

I found similar solution on https://stackoverflow.com/a/26650255/8454103 which is for your reference. 我在https://stackoverflow.com/a/26650255/8454103上找到了类似的解决方案,供您参考。

Try like this; 这样尝试;

select Output from (
select Data, c1.FullNames as LeftSideName, c2.FullNames as RightSideName, LeftSide, RightSide, REPLACE(REPLACE(Data,'[' + LeftSide + ']',c1.FullNames),'[' + RightSide + ']',c2.FullNames) as Output from (
select r.ID, Data,SUBSTRING(Data, 2, 1) LeftSide ,SUBSTRING(Data, 6, 1) RightSide from @result r ) Result
inner join @codes c1 ON Result.LeftSide = c1.ID
inner join @codes c2 ON Result.RightSide = c2.ID)
Records

Output:
10-20
10+30
40-10

The query can perform replacing dynamically A,B,C,D,E according to @codes table etc. 该查询可以根据@codes表等动态替换A,B,C,D,E

Try this: 尝试这个:

select ID, REPLACE(REPLACE(REPLACE(REPLACE(Data,
            '[A]', (select FullNames from @codes where ID = 'A')),
            '[B]', (select FullNames from @codes where ID = 'B')),
            '[C]', (select FullNames from @codes where ID = 'C')),
            '[D]', (select FullNames from @codes where ID = 'D'))
from @result

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM