首先看一下数据结构表

 IF(OBJECT_ID('tempdb..#tProduct')IS NOT NULL)
DROP TABLE #tProduct
SELECT * INTO #tProduct FROM(
SELECT 1 AS CatagoryID,1 AS ProductID,'aaa'AS ProductName
UNION
SELECT 1 AS CatagoryID,2 AS ProductID,'bbb'AS ProductName
UNION
SELECT 1 AS CatagoryID,3 AS ProductID,'ccc'AS ProductName
UNION
SELECT 2 AS CatagoryID,4 AS ProductID,'xxx'AS ProductName
UNION
SELECT 2 AS CatagoryID,5 AS ProductID,'yyy'AS ProductName
UNION
SELECT 2 AS CatagoryID,6 AS ProductID,'zzz'AS ProductName
)TEMP
--SELECT * FROM #tProduct

所需的查询结果

CatagoryID

Products

1

aaa,bbb,ccc

2

xxx,yyy,zzz

查询语句实现

 SELECT DISTINCT T1.CatagoryID
,Products=REPLACE((SELECT ProductNameAS [data()] FROM #tProduct T2 WHERE T2.CatagoryID=T1.CatagoryID ORDER BY ProductID FOR XML PATH('')),' ',',')
FROM #tProduct T1 ORDER BY CatagoryID

讲解:请依次执行以下语句查看结果

更多关于FOR XML PATH 请参考msdn。

1、使用FOR XML PATH生成XML文档字符串

 SELECT CatagoryID,ProductID,ProductName FROM #tProduct
FOR XML PATH('Products'),ROOT('root')

简化一下

 SELECT ProductName FROM #tProduct
FOR XML PATH('')

2、使用data()去掉XML标签元素(这样就使得一列的值构成一个以空格为分隔符的字符串)

 SELECT ProductName AS [data()] FROM #tProduct
FOR XML PATH('')

说明:通过使用 data() 作为列名, SELECT 语句将返回 ProductName 的列表。又由于FOR XML PATH(‘’) 指定了一个空字符串作为行元素名,因此不会生成元素

3、见最终的实现语句

SQLSERVER利用FOR XML PATH实现分组拼接字符串的更多相关文章

  1. 利用FOR XML PATH行转列(根据某字段分组,多行数据转成一行,并用逗号隔开)

    CREATE TABLE #TEST(A VARCHAR(10) NULL,B VARCHAR(MAX) NULL) INSERT INTO #TESTSELECT 'A','A001'UNION A ...

  2. SqlServer 中 for xml path 相关

    表结构: typename varchar(50) typedesc varchar(50) 示例 SQL 语句: SELECT '{"'+TypeName, '":"' ...

  3. 分组拼接字符串,GROUP_CONCAT

    背景 一年过的很快,文中后来的两位员工 馮大 和 馮二 也要面对无情的 KPI 考核了,他们工作干的很不错,performance 分别是 4 和 5 新需求来了,静悄悄的来了!!! 领导想要查看每个 ...

  4. Oracle group by分组拼接字符串

    select wm_concat(id),depon  from test_1  group by depon

  5. 使用 SQL的 for xml path来进行字符串拼接

    本篇主要讲怎么利用SQL的FOR XML PATH 参数来进行字符串拼接,FOR XML PATH的用法很简单,它会以xml文件的形式来返回数据. 我的讲解步骤: 1:构造初始数据 2:提出问题 3: ...

  6. sql 使用 FOR XML PATH实现字符串拼接

    sql中经常需要把多个行数据合成一行下面是利用 FOR XML PATH来实现的简单介绍. 1,把图一的转换为图二: SELECT articleID, (),tagID)+',' FROM arti ...

  7. 二、sql新增后返回主键|sql 使用 FOR XML PATH实现字符串拼接|sql如果存在就修改不存在就新增

    一.sql新增后返回主键 1,返回自增的主键: INSERT INTO 表名 (字段名1,字段名2,字段名3,…) VALUES (值1,值2,值3,…) SELECT @@IDENTITY 2,返回 ...

  8. xml文件生成方式一(字符串拼接,将多实体类对象写入xml文件)

    1.xml文件生成,拼接字符串使用StringBuffer或StringBuilder 2.拼接好后写入文件即可,将多个实体类写入xml文件 3.这种方式比较简单,但是操作也比较麻烦 4.下面是我的代 ...

  9. SQL Server FOR XML PATH 语句的应用---列转行

    经常在论坛看到高手使用了 for xml path,由于是搜索一下,记录了详细的使用方法.在SQL Server中利用 FOR XML PATH 语句能够把查询的数据生成XML数据,下面是它的一些应用 ...

随机推荐

  1. 大数据系列修炼-Scala课程03

    前言 今天上班看了很多关于前端js,jQuery.bootstrap.js以及springMVC看得迷迷糊糊的,毕竟以前很少去学习前端的技术,所有看得有点困,还好看得比较多,回家后也开始学习关于Sca ...

  2. fpga该驱动器调试dev_dbg 无输出

    近期需要调试fpga驾驶,整个是非常蛋疼.dev_dbg 我想用这个作为没有成功调试输出,它已被彻底打垮! 反射... 现在基于以下设置是不相关的打印,和网上说的有些出入,问题还得研究下. 驱动程序调 ...

  3. 给Notepad++ 加右键菜单带图标

    原文:给Notepad++ 加右键菜单带图标 从网上下载下来的Notepad++  http://download.tuxfamily.org/notepadplus/6.3.3/npp.6.3.3. ...

  4. 使用Jenkins来构建Docker容器

    使用Jenkins来构建Docker容器(Ubuntu 14.04) 当开发更新了代码,提交到Gitlab上,然后由测试人员触发Jenkins,于是一个应用的新版本就被构建了.听起来貌似很简单,dua ...

  5. linux网络编程学习笔记之四 -----多-threaded服务器

    对于使用过程中并发.通过实现更轻量级线程. 每个线程都是一个独立的逻辑流. 主题是CPU在执行调度的最小独立单位,这个过程是资源分配单元.当然,这是在微内核操作系统说.总之,这是唯一的一个操作系统内核 ...

  6. sessionStorage、localStorage、cookie

    sessionStorage 和 localStorage 是HTML5 Web Storage API 提供的,可以方便的在web请求之间保存数据.有了本地数据,就可以避免数据在浏览器和服务器间不必 ...

  7. Bootstrap的栅格系统

    Bootstrap的栅格系统 上一节:ASP.NET MVC5 + EF6 入门教程 (6) View中的Razor使用 源码下载:点我下载 要做一个完整的系统,除了需要MVC这样的B/S框架及EF这 ...

  8. Android SDK Web SDK 接口测试总结

    什么是SDK SDK就是一个程序,提供一些方法,调用这些方法,可以实现一些功能.如:调用银行提供的SDK,可以实现在线支付的功能. 目前主要接手的SDK有js SDK 和android SDK.JS ...

  9. GNU中宏定义对可变参数的支持(引自百度)

    http://zhidao.baidu.com/question/125413478.html 问:#define PDEBUG(fmt,args...) fprintf(stderr,fmt, ## ...

  10. leetcode[61] Unique Paths

    题目:给定一个m*n的矩阵,从头开始,只能往右边和下边走,一次走一格,知道走到最后一个(右下角)为止.总共有多少种走法. 典型的动态规划吧.其实从头走到尾部,和从尾部开始走到头是一样的次数.我们用一个 ...