2010-06-18 6 views
0

다음 표가 있습니다.시작 단어 바꾸기

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 tblReplacement우리가 tblInput에서 검색해야 할 단어 을 유지하면서 tblInput단어의 목록을 보유하고

Id ReplacementWords 
--- ---------------- 
1 Hi 
2 are 
3 Ok 
4 This 

~ d 일치하는 것이 발견되면 우리는 그 것을 으로 대체해야합니다.

하지만 처음에는 일치하는 단어가 있으면 단어를 교체해야합니다. tblInput에서

,

ID 1의 경우

, 대체됩니다 단어 만 'Hi'and not 'are'

이전부터입니다 '있다'가 그것은 아닌 '어떻게' tblReplacement 목록에.

이드 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 <> '' 

하지만 내가 원하는 출력을 받고 있지 않다. 그것은 모든 일치 단어를 대체합니다. 필요

긴급 도움 **. (기반 SET) **

내가 정확하게 귀하의 요구 사항을 이해 couldnt는 SQL 서버를 2005

감사

+1

당신은이 질문을하거나 반복해서 반복적으로 물어 봤습니다. 나는 거의 중복으로 닫히기를 갈망합니다. 또한 ** 문자열 조작 **을 다루고 있습니다. ** ** ** ** 당신은 집합 기반 방식으로 할 수있는 일이 아닙니다. - 문자열로 피들을 틀 필요가 있습니다. 방법은 "집합 기반"). CTE (WITH .....)를 사용하면 설정 기반으로 할 수 있습니다. 다시 : 지구상에서 무엇을 할 수 있습니까? ** 정말로 ** 원하는가? –

답변

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 
+0

그런 다음 제안 된 솔루션이 작동해야합니다. 열 이름 등을 변경해야합니다. – josephj1989

관련 문제