[英]SQL Server: Replace values in field using lookup other table
假設我有下面的表格腳本
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
這些的輸出如下:@result
ID Data
-- -------
1 [A]-[B]
2 [D]-[A]
3 [A]+[C]
@codes
ID FullNames
-- -------
A 10
B 20
C 30
D 40
現在我還希望輸出如下:
ID Data
-- -----
1 10-20
2 40-10
3 10+30
請幫我。 請注意:數據列還包含([A]-[B] + [D])* [C]
我在https://stackoverflow.com/a/26650255/8454103上找到了類似的解決方案,供您參考。
這樣嘗試;
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
該查詢可以根據@codes
表等動態替換A,B,C,D,E 。
嘗試這個:
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.