根据某一字段值相同合并字符串

在做项目提取需求的数据过程中,遇到一个这样的问题,相同的ID号,不同的value记录希望可以合并成一条记录,以‘/’隔开,并输出。

图1

期望的结果如下图:

图2

SQL解决方法一:


SELECT  *  FROM (  SELECT DISTINCT [id]  FROM [test] )A

OUTER APPLY (  SELECT

 [nameStr]= STUFF(REPLACE(REPLACE(

 (

 SELECT [name] FROM [test] N

 WHERE [id] = A.id

 FOR XML AUTO

 ), '', ''), 1, 1, '')

)M

运行结果如下:

图3

代码分析:

1、CROSS APPLY 与 OUTER APPLY

使用 APPLY 运算符可以为实现查询操作的外部表表达式返回的每个行调用表值函数。表值函数作为右输入,外部表表达式作为左输入。通过对右输入求值来获得左输入每一行的计算结果,生成的行被组合起来作为最终输出。APPLY 运算符生成的列的列表是左输入中的列集,后跟右输入返回的列的列表。

APPLY 有两种形式:CROSS APPLY 和 OUTER APPLY。CROSS APPLY 仅返回外部表中通过表值函数生成结果集的行。OUTER APPLY 既返回生成结果集的行,也返回不生成结果集的行,其中表值函数生成的列中的值为 NULL。

2、 FOR XML AUTO

将结果转换为XML结构


SQL解决方法二:

最后执行结果如下:

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 2017/3/14 RDBMS:关系型数据库管理系统 关系模型独立于语言 SQL有几种不同类型的语言:数据定义语言...
    ancherl阅读 5,581评论 0 6
  • 什么是SQL数据库: SQL是Structured Query Language(结构化查询语言)的缩写。SQL是...
    西贝巴巴阅读 5,865评论 0 10
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 32,073评论 18 399
  • 文/辛苗 每个人都是一个独立的个体,有自己的思想和灵魂,会面对不同的人生遭遇,如何做好自己,面对亲情、友情和爱情,...
    心中的小火苗阅读 3,570评论 4 6
  • 强制性的静下心来等待一个已知的结果总是会那么煎熬,耗掉一身心血。 起初不以为意,只觉还远着,不急的,急也没用!所以...
    红魂阅读 1,547评论 0 0