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

通过 cross apply 实现函数转换成表并与原表进行关联的更多相关文章

  1. java字符串转义,把&lt;&gt;转换成<>等字符【原】

    java字符串转义,把<>转换成<>等字符 使用的是commons-lang3-3.4 中的StringEscapeUtils类 package test; import ja ...

  2. C++函数转换成C#函数

            ///                        /// </param>         /// <returns></returns>    ...

  3. 控制台程序的中文输出乱码问题(export LC_CTYPE=zh_CN.GBK,或者修改/etc/sysconfig/i18n为zh_CN.GBK。使用setlocale(LC_CTYPE, "");会使用默认办法。编译器会将源码做转换成Unicode格式,或者指定gcc的输入文件的编码参数-finput-charset=GBK。Linux下应该用wprintf(L"%ls/n",wstr))

    今天发现用securecrt登陆时,gcc编译出错时会出现乱码,但直接在主机的窗口界面下用Shell编译却没有乱码.查看了一下当时的错误描述,发现它的引号是中文引号,导致在SecureCRT中显示出错 ...

  4. T-SQL Part VIII: CROSS APPLY, OUTER APPLY

    除了CROSS JOIN, INNER JOIN, OUTER JOIN之外,T-SQL还提供了CROSS APPLY和OUTER APPLY这两个较为另类的Set操作符. 首先来看CROSS APP ...

  5. 如何将PHP对象数组转换成普通数组

    /** * 对象数组转为普通数组 * * AJAX提交到后台的JSON字串经decode解码后为一个对象数组, * 为此必须转为普通数组后才能进行后续处理, * 此函数支持多维数组处理. * * @p ...

  6. Oracle-创建新表,创建备份表,对表中插入多条数据

    一.创建新表 0.基本语法 create table 表名称(id varchar2(50) primary key ,name char(200) not null,phone number(11) ...

  7. JQuery将form表单值转换成json字符串函数

    由于后台接口限定,必须要将表单内容转换成json字符串提交,因此写了一个将form表单值转成json字符串的函数.     前提:页面引入了JQuery          下面直接上代码 一.代码 / ...

  8. SQLServer count函数、cross apply和outer apply、

    1.COUNT(column_name) 函数返回指定列的值的数目(NULL 不计入)2.COUNT(*) 函数返回表中的记录数 select *   from TABLE_1 T1 outer ap ...

  9. 关于Web项目里的给表单验证控件添加结束时间不得小于开始时间的验证方法,日期转换和前台显示格式之间,还有JSON取日期数据格式转换成标准日期格式的问题

    项目里有些不同页面间的日期显示格式是不同的, 第一个问题: 比如我用日期控件WdatePicker.js导包后只需在input标签里加上onClick="WdatePicker()" ...

随机推荐

  1. Input.GetMouseButtonDown 在fixedupdate中会出现丢失问题,在update中则完全没这个问题

    Input.GetMouseButtonDown 在fixedupdate中会出现丢失问题,在update中则完全没这个问题

  2. Linux 指令表

    Linux简介(了解) Linux介绍 Linux是类UNIX计算机的统称 Linux操作系统的内核也是Linux Linux是由芬兰大学生Linux Torvalds于1991年编写的 Linux这 ...

  3. idea更换项目取消直接在当前窗口打开,设置为询问

  4. layui开关switch显示不全问题

    先看效果: 开关显示不全,高度也不对称. 解决: 在所用到的html/jsp中自己加css .layui-form-switch { width: 52px; height: 23px; } 再看效果 ...

  5. 浅谈python反序列化漏洞

    最近看到p神一篇讲python反序列化的文章,结合redis未授权访问组合漏洞,感觉在flask和redis的构架中比较常见,便记录下来. p神原文:https://www.leavesongs.co ...

  6. JVM(二) 栈内存结构

    栈内存是描述java方法执行的内存模型,每个方法在执行的同时都会创建一个栈帧(Stack Frame)用于存储局部变量表.操作数栈.动态链接.返回出口等信息.每一个方法从调用直至执行完成的过程,就对应 ...

  7. Ajax的基本使用流程

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  8. springmvc流程 struts2 spring Hibernate 优缺点 使用场景介绍

    为什么使用HandlerAdapter? SpringMVC使用一个Servlet(DispacherServlet)代理所有的请求 , SpringMVC中的处理器是方法级别的处理器,而非类级别的处 ...

  9. PAT(B) 1086 就不告诉你(Java)

    题目链接:1086 就不告诉你 (15 point(s)) 题目描述 做作业的时候,邻座的小盆友问你:"五乘以七等于多少?"你应该不失礼貌地围笑着告诉他:"五十三.&qu ...

  10. K number(思维和后缀以及3的特性)(2019牛客暑期多校训练营(第四场))

    示例1: 输入:600 输出:4 说明:'600', '0', '0', '00' are multiples of 300. (Note that '0' are counted twice bec ...