我有以下表格。
tblInput
Id WordPosition Words
-- ----------- -----
1 1 Hi
1 2 How
1 3 are
1 4 you
2 1 Ok
2 2 This
2 3 is
2 4 me
tblReplacement
Id ReplacementWords
--- ----------------
1 Hi
2 are
3 Ok
4 This
tblInput
保存单词列表,tblReplacement
保留单词
我们需要在tblInput 中搜索,如果找到匹配,那么我们需要替换
那些。
但问题是,如果在开头找到任何匹配,我们需要替换这些词。
即。在tblInput中,
如果是ID 1 ,则 ,将替换的字词仅为'Hi'
and not 'are'
因为在'are'之前,'How'存在并且它不在tblReplacement列表中。
如果是Id 2,则 ,将替换为'Ok' & 'This'
的字词。既然这两个
单词出现在tblReplacement表中,在第一个单词之后,即'确定'
替换后,第二个单词'This'此处首先出现在
列表中ID类别2
。因为它在tblReplacement中可用,并且现在是第一个单词,所以这将是
也可以被替换。
所以期望的输出将是
Id NewWordsAfterReplacement
--- ------------------------
1 How
1 are
1 you
2 is
2 me
到目前为止我的方法:
;With Cte1 As(
Select
t1.Id
,t1.Words
,t2.ReplacementWords
From tblInput t1
Cross Join tblReplacement t2)
,Cte2 As(
Select Id, NewWordsAfterReplacement = REPLACE(Words,ReplacementWords,'')
From Cte1)
Select * from Cte2 where NewWordsAfterReplacement <> ''
但我没有得到所需的输出。它正在替换所有匹配的单词。
需要紧急帮助**。(基于SET)**
我正在使用SQL Server 2005。
由于
答案 0 :(得分:0)
我无法完全理解你的要求。但据我所知,这适用于给定的数据
with cte1 as(
select 1 as id, 1 as wp, 'Hi' as words union all
select 1, 2 , 'How' union all
select 1 , 3 , 'are' union all
select 1 , 4 , 'you' union all
select 2 , 1 , 'Ok' union all
select 2 , 2 , 'This' union all
select 2 , 3 , 'is' union all
select 2 , 4 , 'me'
),
cte2 as(
select 1 as id, 'Hi' as rep union all
select 2 , 'are' union all
select 3 , 'Ok' union all
select 4 , 'This')
select ID,words from cte1
except
select ID,words from(
select a.id,a.words,a.wp,RANK() over(partition by a.id order by wp) as rnk
from cte1 as a inner join
cte2 as b on a.words=b.rep
) as x
where x.wp=x.rnk