由于项目的原因,需要将一些记录分类汇总,但还要列出相关的明细,这样的需求我还是第一次遇到,蛋疼了,还是请求一下度娘吧。搜索一番还是有结果,请看以下例子:

create table tb ([id] int,[name] varchar(2))
insert into tb
select 1,'aa' union all
select 2,'bb' union all
select 1,'cc' union all
select 3,'dd' union all
select 2,'ee'

select * from tb
--查询
select
id,
name=stuff((select ','+name from tb where id=t.id for xml path('')),1,1,'')
from
tb t
group by
id

方法二:

CREATE FUNCTION GET_STRING(@ID INT)
RETURNS VARCHAR(50)
AS
BEGIN
DECLARE @NAME VARCHAR(500)
SELECT @NAME=ISNULL(@NAME+',','')+NAME FROM TB WHERE ID=@ID
RETURN @NAME
END

SELECT ID ,DBO.GET_STRING(ID)NAME FROM TB GROUP BY ID

-----------------------------------------------------------------------
在oracle中,是有相对应的函数,sys_connect_by_path函数。

先在这里把oracle的函数实现也写下吧

select id
,itrim(max(sys_connect_by_path(name,','))) as name
from
(select id
,name
,lead(rnFirst) over(partition by no order by rnFirst)rnNext
from
(select a.id
,a.name
,row_number() over(order by a.id,a.name desc) rnFirst
from @t a) tmpTable1
) tmpTable2
start with rnNext is null
connect by rnNext = PRior rnFirst
group by id

以上是实现oracle中的行转列方式。

********************************************下面我们来看一下sqlserver的,因为sqlserver没提供类似的函数,不知道sqlserver2012提供没

不过sqlserver支持起来也很简单,使用cross apply和for xml path组合来用,这两个单独都知道是怎么回事,怎么使用,但是真不知道还有它俩组合来完成这个功能的,感到很是不可思议,这里要感谢下网络上的人,原来自己写东西都是把所学到的知识记录到本机,从不放到网上,也可能是最近吧,好多工作不会,都是通过网络帮助,就把我所知道的东西也都放到网上来,大家一起学习。

sqlserver:

select id, SUBSTRING(names, 1, len(names)-1) from @t AS A cross APPLY
(SELECT NAME + ',' FROM @t AS B WHERE A.id = B.id FOR XML PATH('')) D (names)

GROUP BY id, names

sql server 使用for xml path 将1列多行转换为字符串连接起来,俗称 sql 合并字符的更多相关文章

  1. sql server 使用for xml path 将1列多行转换为字符串连接起来

    create table tb ([id] )) insert into tb ,'aa' union all ,'bb' union all ,'cc' union all ,'dd' union ...

  2. sql server的for xml path与变通的行转列

    SQL Server中有提供一个FOR XML PATH的子句(不知道能不能叫函数),用来将查询结果行输出成XML格式,我们可以通过这个语法做一些变通实现一些特定的功能,比如说行转列.要会变通的话,当 ...

  3. Sql Server 之 for xml (path,raw,auto,root)

    1.for xml path('str') select ID,CreateTime  from dbo.ArticleInfo for xml Path('mytitle') 结果:(注意:如果是s ...

  4. [SQL Server]一列多行转换为字符串

    在 SQL Server 中,如何将多行数据变成一个字符串保存. skill 投石 挖矿 刮痧 上面三行数据想要得到结果为:投石,挖矿,刮痧 有两种方式: 拼接字符串. 使用 for XML 首先创建 ...

  5. sql查询语句for xml path语法

    [原地址] for xml path作用:将多行的查询结果,根据某一些条件合并到一行. 例:现有一张表 执行下面语句 select Department, (SELECT Employee+',' F ...

  6. SQL Server 扩展事件(Extented Events)从入门到进阶(1)——从SQL Trace到Extented Events

    由于工作需要,决定深入研究SQL Server的扩展事件(Extended Events/xEvents),经过资料搜索,发现国外大牛的系列文章,作为“学习”阶段,我先翻译这系列文章,后续在工作中的心 ...

  7. 智能SQL优化工具--SQL Optimizer for SQL Server(帮助提升数据库应用程序性能,最大程度地自动优化你的SQL语句 )

    SQL Optimizer for SQL Server 帮助提升数据库应用程序性能,最大程度地自动优化你的SQL语句 SQL Optimizer for SQL Server 让 SQL Serve ...

  8. 解决:安装SQL Server 2008 Native Client遇到错误(在Navicat premium新建sqlserver连接时 需要):An error occurred during ...HRESULT: 0x80070422(注意尾部的错误号)

    解决:安装SQL Server 2008 Native Client遇到错误(在Navicat premium新建sqlserver连接时 需要):An error occurred during . ...

  9. SQL Server分区表,能否按照多个列作为分区函数的分区依据(转载)

    问: Hi, I have a table workcachedetail with 40 million rows which has 8 columns.We decided to partiti ...

随机推荐

  1. python练习之购物车脚本

    # -*- coding:utf-8 -*- #简单的购物车小程序 author:李瑞鑫 shopping_car =[] product_list_tatol = "---product ...

  2. Eclipse设置不格式化注释

    Eclipse设置不格式化注释 注释中写点带格式的文字,format后全乱了,解决办法如下: Windows -> Preferces -> java -> Code Style - ...

  3. js-form进行reset重置

    (需要注意:做这个reset和submit时页面不能有这两个id和名称) <form id="form1" name="formName" action= ...

  4. APP的缓存文件到底应该存在哪?看完这篇文章你应该就自己清楚了

    APP的缓存文件到底应该存在哪?看完这篇文章你应该就自己清楚了 彻底理解android中的内部存储与外部存储 存储在内部还是外部 所有的Android设备均有两个文件存储区域:"intern ...

  5. 绘图: Shape, Path

    Shape - 图形 Path - 路径 示例1.演示“Shape”相关知识点Drawing/Shape.xaml <Page x:Class="Windows10.Drawing.S ...

  6. 绑定: x:Bind 绑定, x:Bind 绑定之 x:Phase, 使用绑定过程中的一些技巧

    背水一战 Windows 10 之 绑定 x:Bind 绑定 x:Bind 绑定之 x:Phase 使用绑定过程中的一些技巧 示例1.演示 x:Bind 绑定的相关知识点Bind/BindDemo.x ...

  7. Linux基础1

    1.Linux文件系统类型 ext2 ext3(rhel5) ext4(rhel6) lvm raid swap gfs nfs vfat 2.linux 系统通过磁盘接口识别磁盘 IDE接口 hda ...

  8. BZOJ 1029 建筑抢修 贪心+堆

    又搞了一晚上OI,编了两道BZOJ和几道NOI题库,临走之前写两篇感想 noip越来越近了,韩大和clove爷已经开始停课虐我们了... 1029: [JSOI2007]建筑抢修 Time Limit ...

  9. 计算机组成原理 及CPU,硬盘,内存三者的关系

    前面提到了,电脑之父——冯·诺伊曼提出了计算机的五大部件:输入设备.输出设备.存储器.运算器和控制器. 我们看一下现在我们电脑的: 键盘鼠标.显示器.机箱.音响等等. 这里显示器为比较老的CRT显示器 ...

  10. C#检测驱动是否安装的问题

    #region 检测CCD驱动是否安装成功 string path = @"C:\WINDOWS\system32\drivers\UsbCamIF.sys"; //驱动的默认安装 ...