У меня есть следующие таблицы.Заменить начальные слова
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
держать слова , что нам нужно искать в tblInputd, если совпадение найдено, тогда нам нужно заменить тех.
Но проблема в том, что мы должны заменить эти слова, если в начале найдено какое-либо совпадение.
т.е. в tblInput,
в случае ID 1, слова, которые будут заменены только 'Hi'
and not 'are'
, поскольку до «являются», «как» есть и не в списке tblReplacement.
в случае Id 2, слова, которые будут заменены, - 'Ok' & 'This'
. Поскольку эти и
слова присутствуют в таблице tblReplacement и после первого слова, т.е. «Ok» является
заменен, второе слово, которое «Это» здесь приходит первым в списке
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.
Благодаря
Вы снова и снова задавали этот вопрос или некоторые его варианты .... Я почти склонен к тому, чтобы закрыть как дубликат. Кроме того: вы имеете дело с ** строковыми манипуляциями ** - это ** НЕ ** что-то, что вы можете сделать с помощью набора, - вам нужно играть со строками - нет ничего основанного на этом (и нет способ сделать это «на основе набора»). Использование CTE (WITH .....) примерно так же основано на настройке, как вы можете быть - так еще раз: что на самом деле вы ** ДЕЙСТВИТЕЛЬНО ** хотите ??? –