我有下表。替换开始单词
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搜索词 一个d如果找到匹配,那么我们需要替换 那些。
但问题是,如果在开始时发现任何匹配,我们需要替换这些词。
即,在tblInput,
在ID 1的情况下,将被替换的字是唯一'Hi'
and not 'are'
因为之前“是”,“如何”是存在的,它不在tblReplacement列表中。
在Id 2的情况下,将被替换的字词是'Ok' & 'This'
。由于这些都
话是存在于tblReplacement表的第一个字即“确定”后
更换,第二个字是“这”这里首先出现的
列表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 <> ''
但我没有得到期望的输出。它取代了所有的匹配词。
迫切需要帮助**。(基于集)**
我使用SQL Server 2005的
感谢
您一直在问这个问题或其中的轻微变化......我几乎倾向于重复关闭。另外:你正在处理**字符串操作** - 这是**不**你可以以基于集合的方式做的事情 - 你需要摆弄字符串 - 没有任何基于此的设置(和不方法来做到这一点“基于集合”)。使用CTE(WITH .....)就像你可以做的那样基于set-based - 再一次:你究竟是什么**真的**想要? – 2010-06-18 05:13:42