替换开头的单词

时间:2010-06-18 03:08:13

标签: sql-server-2005

我有以下表格。

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。

由于

1 个答案:

答案 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