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这个函数返回的结果与原表进行合并

  • 相关阅读:
    UED
    内容分发网络CDN(互联网技术)
    分布式系统基础架构
    十六进制后按高低位分开(转)
    Kafka.net使用编程入门(二)
    Storm集成Kafka应用的开发
    .net 框架
    .NET 的 WebSocket 开发包比较(转)
    ASP.NET Web API上实现 Web Socket
    Scrapyd部署爬虫
  • 原文地址:https://www.cnblogs.com/songr/p/9790714.html
Copyright © 2011-2022 走看看