应用场景:多条数据某列数据以某种样式合并成一条数据,例如:

1    1,0    小赵    001
2    2,0    小钱    002                        =====》                         小赵(001),小钱(002),小李(004)
4    4,0    小李    004

1、首先建立简化模型:假设老王有四个邻居,赵钱孙李,现在有四个小孩,小赵小钱小孙小李

                       

2、建表:

(1)建立小区住户表

CREATE TABLE xiaoqv(
    id INT NOT NULL,
    name NVARCHAR(50) NOT NULL
)
小区里有五位住户,插入小区住户表
INSERT INTO xiaoqv VALUES
(0,'隔壁老王'),
(1,'赵'),
(2,'钱'),
(3,'孙'),
(4,'李')

(2)建立班级学生表

CREATE TABLE class (
    id INT NOT NULL,
    parentid NVARCHAR(50) NOT NULL,
    name NVARCHAR(50) NOT NULL,
    phone NVARCHAR(50) NOT NULL
)

班里有4位学生,根据住户确认,插入班级学生表

INSERT INTO class VALUES
(1,'1,0','小赵','1001'),
(2,'2,0','小钱','1002'),
(3,'3','小孙','1003'),
(4,'4,0','小李','1004')

当前表中的数据为;

3.建立查询

SELECT x.name AS name,
(SELECT STUFF((SELECT ','+ e.info
    FROM (  
        SELECT ISNULL(name,'')+'('+ISNULL(xuehao,'*')+')' AS info FROM class c WHERE CHARINDEX(CONVERT(VARCHAR(50),x.id),c.parentid)>0
    )e FOR XML PATH(''))
    ,1,1,'')
)AS children
 FROM xiaoqv x

到这里就结束了

3.知识回顾

(1)字符串位置检索 charindex

(2)将表字段转化为xml表数据 for xml path('')

自定义分割格式

(3)字符串裁剪 stuff

看得出来,stuff(a,x,n,b)其意义为将字符串a从第x位开始,将其后的n位替换为 b

当然这里用 substring也可以,只是需要获取未知字符串长度,需要获取两次,代码比较臃肿,效率还低

全部sql语句

 CREATE TABLE xiaoqv(
id INT NOT NULL,
name NVARCHAR(50) NOT NULL
) INSERT INTO xiaoqv VALUES
(0,'隔壁老王'),
(1,'赵'),
(2,'钱'),
(3,'孙'),
(4,'李') CREATE TABLE class (
id INT NOT NULL,
parentid NVARCHAR(50) NOT NULL,
name NVARCHAR(50) NOT NULL,
xuehao NVARCHAR(50) NOT NULL
)
INSERT INTO class VALUES
(1,'1,0','小赵',''),
(2,'2,0','小钱',''),
(3,'','小孙',''),
(4,'4,0','小李','') SELECT * FROM dbo.xiaoqv
SELECT * FROM dbo.class SELECT x.name AS name,
(SELECT STUFF((SELECT ','+ e.info
FROM (
SELECT ISNULL(name,'')+'('+ISNULL(xuehao,'*')+')' AS info FROM class c WHERE CHARINDEX(CONVERT(VARCHAR(50),x.id),c.parentid)>0
)e FOR XML PATH(''))
,1,1,'')
)AS children
FROM xiaoqv x SELECT CHARINDEX('','') SELECT name FROM class FOR XML PATH('') SELECT ','+name FROM class FOR XML PATH('') SELECT STUFF('',2,5,'') SELECT SUBSTRING('',2,LEN('')-1)

SQL Server 字符串合并的更多相关文章

  1. sql server 字符串替换函数REPLACE

    sql server 字符串替换函数REPLACE函数的使用 <pre name="code" class="sql">--参数1:需要替换字符的母 ...

  2. sql server字符串的类型

    sql server字符串分为不同的类型,下面就将为您介绍几个sql server字符串的常见类型,希望对您学习sql server字符串能有所帮助. nchar 此数据类型可存储1~4000个定长U ...

  3. sql server 字符串转成日期格式

    在SQL Server数据库中,SQL Server日期时间格式转换字符串可以改变SQL Server日期和时间的格式,是每个SQL数据库用户都应该掌握的.本文我们主要就介绍一下SQL Server日 ...

  4. [转]SQL Server字符串处理函数大全

    select语句中只能使用sql函数对字段进行操作(链接sql server), select 字段1 from 表1 where 字段1.IndexOf("云")=1;这条语句不 ...

  5. SQL Server字符串左匹配

    在SQL Server中经常会用到模糊匹配字符串的情况,最简单的办法就是使用like关键字(like语法http://msdn.microsoft.com/en-us/library/ms179859 ...

  6. SQL SERVER字符串函数

    本篇文章还是学习<程序员的SQL金典>内容的记录,此次将讲解的是SQL SERVER的字符串函数. 其实数据库跟程序语言库一样,都会集成很多可以使用的API.这些API,如果你熟悉的话,将 ...

  7. Sql Server 字符串操作总结

    SQL Server 支持两种字符数据类型---常规和Unicode:常规类型包括char 和varchar:unicode包括nchar 和nvarchar.常规的每个字符占用一个字节存储,而uni ...

  8. SQL Server ->> 字符串对比

    今天同事问我关于SQL Server在字符串尾随着空格时进行字符串对比的做法.关于这个问题正好在这里讲一下,就是SQL Server是按照ANSI/ISO SQL-92中的定义做字符串对比的. 在KB ...

  9. sql server 字符串函数大全

    平常会用到一些函数处理字符串,用的不算频繁,所以每次用到的时候就忘记了,这次在网上找了一篇文档,担心突然某一天这篇文章找不到了,然后就把文章的内容复制了一份: /* 1,ASCII返回字符表达式中最左 ...

随机推荐

  1. Python3之urllib模块

    简介 urllib是python的一个获取url(Uniform Resource Locators,统一资源定位符),可以用来抓取远程的数据. 常用方法 (1)urlopen urllib.requ ...

  2. leetcode-849-到最近的人的最大距离

    题目描述: 在一排座位( seats)中,1 代表有人坐在座位上,0 代表座位上是空的. 至少有一个空座位,且至少有一人坐在座位上. 亚历克斯希望坐在一个能够使他与离他最近的人之间的距离达到最大化的座 ...

  3. 南昌 Max answer

    https://nanti.jisuanke.com/t/38228 Alice has a magic array. She suggests that the value of a interva ...

  4. 本地docker镜像上传Docker Hub,并且在腾讯云上pull该镜像,最后运行成功。

    1:在docker hub 上注册一个账号(本人直接能注册,有的说不能),然后创建自己的仓库. 2:登录docker hub ( longdbdocker --hub账号,longdb --仓库名称) ...

  5. [Xamarin.Android]使用Java Bindings Libary專案 Binding Java元件(.jar) 與Metadata.xml、型別對應 (转帖)

    使用Xamarin開發Android APP時, 如果已經有原本就用Java寫好的套件(.jar), 就可以利用Xamarin提供的Java Bindings Libary將他變成C#可使用的元件. ...

  6. 【ZooKeeper】单机伪集群搭建(适用于mac)

    1.配置 .zookeeper下载地址:http://apache.mirrors.lucidnetworks.net/zookeeper/ 可以选择需要的版本,我下载的是zookeeper-3.4. ...

  7. js小技巧--摘录1

    原文地址https://github.com/loverajoel/jstips 1.数组中插入元素 a.尾部追加 var arr = [1,2,3,4,5]; var arr2 = []; arr. ...

  8. Cloudera Manager安装之Cloudera Manager安装前准备(CentOS6.5)(一)

    Cloudera Manager安装前准备 (一)机器准备 192.168.80.148   clouderamanager01 (部署ClouderaManager-server和Mirror se ...

  9. Types方法之isCastable-isConvertible

    5. Conversions and Promotions 5.1. Kinds of Conversion 5.1.1. Identity Conversion 5.1.2. Widening Pr ...

  10. c++ 网络编程(十一) LINUX下 初步制作基于HTTP的WEB服务器

    原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/9663028.html HTTP概要 理解Web服务器端: 编写HTTP(超文本传输协议)服务器 ...