【问题标题】:Splitting (duplicating rows of) an SQL table based on the values in one column根据一列中的值拆分(复制行)SQL 表
【发布时间】:2013-04-05 15:32:15
【问题描述】:

我有一个表,它是导出的结果,并且具有如下所示的列和值

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

别名和等级由一个字符分隔(在本例中为 CHAR(10)),并且它们具有相同数量的条目。但每个名称可能有不同数量的别名(因此排名)。

我想写一个 SQL 查询给我下表

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

我该怎么做?

【问题讨论】:

    标签: sql-server split multiple-value


    【解决方案1】:
    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
    

    【讨论】:

    • 非常感谢 muhmud!你有什么书籍或资源可以让我自学这些复杂程度的查询吗?
    猜你喜欢
    • 2016-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-17
    • 2019-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多