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

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. 爬虫实战1:使用requests和正则爬取电影信息

    代码如下 # coding=utf-8 import requests from requests.exceptions import RequestException import re impor ...

  2. 06-图2 Saving James Bond - Easy Version (25 分)

    This time let us consider the situation in the movie "Live and Let Die" in which James Bon ...

  3. BiliBili, ACFun… And More!【递归算法】

    题源:http://acm.uestc.edu.cn/#/problem/show/3 题解: 题意:播放一段视频文件,有播放速度和缓冲速度两种,因为作者的癖好,播放前要缓冲几秒钟(这段时间不计算在总 ...

  4. Java类型简介

    1 java基本数据类型 1.1 基本数据类型 java的基础数据类型有多少个,每个在内存的分配是多少呢? 类型 分配字节 byte 1 short 2 char 2 int 4 long 8 ref ...

  5. 关于莫比乌斯函数的塞 : 莫比乌斯前n项和 , 莫比乌斯函数绝对值的前n项和

    https://ac.nowcoder.com/acm/contest/874#submit/{%22problemIdFilter%22%3A25455%2C%22statusTypeFilter% ...

  6. HTML常用汇总

    HTML注释 <!-- --> XHTML:就是要遵守XML规则的HTML标签 DHTML:包含html,js,等动态HTML 表单元素提交时提交的是name属性 get提交.post提交 ...

  7. ubuntu 配置 samba服务器

    samba配置的安装: sudo apt-get install samba smbfs smbclient 二. 创建共享目录: mkdir /home/komy/sharesudu chmod 7 ...

  8. Rest客户端

    public class RestClient { public string EndPoint { get; set; } //请求的url地址 public HttpVerb Method { g ...

  9. EF那点事

    EntityFramework 1-->什么是EnitityFramework   1.1--> ADO.NET Entity Framework 是微软以 ADO.NET 为基础所发展出 ...

  10. 使用PowerShell创建SSAS Role

    PowerShell, SSAS, Role, DatabasePermission, Cube, Dimension, CubePermission, CubeDimensionCube 在SSAS ...