У меня есть таблицы ниже.
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,
в случае идентификатора 1 , слова, которые будут заменены, - это только 'Hi'
and not 'are'
, поскольку, прежде чем 'are', 'How' есть и его нет в списке tblReplacement.
в случае Id 2, слова, которые будут заменены: 'Ok' & 'This'
.Поскольку оба эти слова
присутствуют в таблице tblReplacement и после первого слова, т.е. 'Ok' заменено
, второе слово 'This' здесь стоит первым в списке
ID категории 2
.Так как он доступен в tblReplacement и теперь является первым словом, то он также будет заменен на
.
Таким образом, желаемый результат будет
Id NewWordsAfterReplacement
--- ------------------------
1 How
1 are
1 you
2 is
2 me
Myпока подход:
;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 <> ''
Но я не получаю желаемый результат.Он заменяет все подходящие слова.
Требуется срочная помощь **. (УСТАНОВЛЕНО) **
Я использую SQL Server 2005.
Спасибо