2013-04-05 2 views
0

I는 수출의 결과 다음과 같은분할 한 열의 값에 기초 SQL 테이블 (행 중복)

Name Aliases   Ranks 
Ben BenA BenB BenC 1 5 3 
Jerry JerryA JerryB 7 3 

별칭되고 랭크 등 열 및 값을 가진 테이블을 문자 (이 경우 CHAR (10))로 구분되며 동일한 수의 항목을가집니다. 그러나 각각의 이름은 별칭 (And Rank)이 다를 수 있습니다.

나는 나에게 다음 표 나는이 작업을 수행 할 수있는 방법

Name Alias  Rank 
Ben BenA  1  
Ben BenB  5 
Ben BenC  3 
Jerry JerryA 7 
Jerry JerryB 3 

을 제공하기 위해 SQL 쿼리를 작성 하시겠습니까?

답변

2
with cte as (
    select Name, cast(null as int) as AliasStartPosition, cast(0 as int) as AliasEndPosition, Aliases + ' ' as Aliases, cast(null as int) as RankStartPosition, cast(0 as int) as RankEndPosition, Ranks + ' ' as Ranks 
    from (
     values ('Ben', 'BenA BenB BenC', '1 5 3'), 
       ('Jerry', 'JerryA JerryB', '7 3') 
    ) t (Name, Aliases, Ranks) 

    union all 

    select Name, AliasEndPosition + 1, charindex(' ', Aliases, AliasEndPosition + 1), Aliases, RankEndPosition + 1, charindex(' ', Ranks, RankEndPosition + 1), Ranks 
    from cte 
    where charindex(' ', Aliases, AliasEndPosition + 1) != 0 
) 
select Name, substring(Aliases, AliasStartPosition, AliasEndPosition - AliasStartPosition) as Alias, substring(Ranks, RankStartPosition, RankEndPosition - RankStartPosition) as Rank 
from cte 
where AliasStartPosition is not null 
+0

감사합니다. muhmud! 이러한 수준의 복잡성 쿼리를 스스로 가르쳐 줄 수있는 책이나 자료를 추천하십니까? – Dogahe