zoukankan      html  css  js  c++  java
  • 通过 cross apply 实现函数转换成表并与原表进行关联

    create table tb_cross_apply
    (
    id int identity,
    multivalue varchar(64)
    )
    
    insert into tb_cross_apply VALUES ('A|B|C')
    insert into tb_cross_apply VALUES ('E|F|G')

    先运行上述代码,最后查询tb_cross_apply会得到如下结果

    1 A|B|C
    2 E|F|G

    如果现在想要这样的结果,如何实现呢?


    1 A
    1 B
    1 C
    2 E
    2 F
    2 G

    首先建立表值函数

    CREATE FUNCTION dbo.Fn_Partition_Value (@value varchar(64))
    returns @result TABLE
    (
       subValue VARCHAR(64)
    )
    as
    begin
    
        declare @sub varchar(64)
        declare @index int
        while CHARINDEX('|',@value) > 0
        begin
            set @index = CHARINDEX('|',@value)
            set @sub = SUBSTRING(@value,1,@index-1)
            INSERT INTO @result VALUES (@sub)
            set @value = SUBSTRING(@value,@index + 1 , LEN(@value) - @index)
        end
    
        if LEN(@value) > 0
        begin
            INSERT INTO @result VALUES (@value)
        end
    
        return
    end

    然后编写下面语句

    select a.id,b.subValue from 
        tb_cross_apply a 
        cross apply 
        dbo.Fn_Partition_Value (a.multivalue) b

    即可,本质就是将Fn_Partition_Value这个函数返回的结果与原表进行合并

  • 相关阅读:
    失落的情
    我有个想法------彩南书屋
    西藏旅游闲记(上)
    夜归
    宝石山再记
    学车的日子(一)
    BootStrapValidator表单验证插件的学习和使用
    shard_row_id_bits & pre_split_regions
    某某大肠_tikv_修改配置参数
    第十二周总结
  • 原文地址:https://www.cnblogs.com/songr/p/9790714.html
Copyright © 2011-2022 走看看