SQL Sever中使用SQL语句实现把重复行数据合并为一行并用逗号分隔

 一.定义表变量

代码如下:

DECLARE @T1 table
(
UserID int , 
UserName nvarchar(50),
CityName nvarchar(50)
);

 

insert into @T1 (UserID,UserName,CityName) values (1,'a','上海')
insert into @T1 (UserID,UserName,CityName) values (2,'b','北京')
insert into @T1 (UserID,UserName,CityName) values (3,'c','上海')
insert into @T1 (UserID,UserName,CityName) values (4,'d','北京')
insert into @T1 (UserID,UserName,CityName) values (5,'e','上海')

select * from @T1

-----最优的方式
SELECT CityName,STUFF((SELECT ',' + UserName FROM @T1 subTitle WHERE CityName=A.CityName FOR XML PATH('')),1, 1, '') AS A
FROM @T1 A
GROUP BY CityName

----第二种方式
SELECT B.CityName,LEFT(UserList,LEN(UserList)-1) 
FROM (
  SELECT CityName,(SELECT UserName+',' FROM @T1 WHERE CityName=A.CityName FOR XML PATH('')) AS UserList
  FROM @T1 A 
  GROUP BY CityName
     ) B

stuff(select ',' + fieldname  from tablename for xml path('')),1,1,'')

这一整句的作用是将多行fieldname字段的内容串联起来,用逗号分隔。
for xml path是SQL Server 2005以后版本支持的一种生成XML的方式。
stuff函数的作用是去掉字符串最前面的逗号分隔符。

时间: 2024-10-29 23:01:12

SQL Sever中使用SQL语句实现把重复行数据合并为一行并用逗号分隔的相关文章

sql里将重复行数据合并为一行数据使用逗号进行分隔_mssql2005

一.定义表变量 复制代码 代码如下: DECLARE @T1 table ( UserID int , UserName nvarchar(50), CityName nvarchar(50) ); 复制代码 代码如下: insert into @T1 (UserID,UserName,CityName) values (1,'a','上海') insert into @T1 (UserID,UserName,CityName) values (2,'b','北京') insert into @

scala-spark中怎么将读取某几行数据合并成一行啊? 新手 谢谢 !

问题描述 spark中怎么将读取某几行数据合并成一行啊? 新手 谢谢 ! 例如图片里说的 谢谢啦 数据是读取的外部csv文件 麻烦啦 求大神指教一下 解决方案 sehll脚本将几行输出合并成一行显示 解决方案二: http://bbs.csdn.net/topics/391872110

【SQL Sever】将SQL Sever中的一个数据表的数据导出为insert语句

例如:这SQL   Sever中的一张数据表,想要将这张数据表中的数据  转化成一个一个的insert语句存储在txt的文档中,那么不论走到那里这个insert语句一执行,我们就能将这个数据表中的数据插入到另一个地方了. 1>在新建查询中,创建一个对象,这个对象就是用来产生这个对象的,名字叫proc_insert,我们可以创建多个不重名的对象,当然也可以删除这个对象. 1 create proc proc_insert (@tablename varchar(256)) 2 as 3 begin

怎么将sql sever中的数据导入到mysql中?

问题描述 怎么将sql sever中的数据导入到mysql中? 求教:怎么将sql sever中的数据导入到mysql中?试了很多次都不可以.有没有大神指导一下! 解决方案 将import.sql中的数据导入到mysql中导入Excel电子表格数据到SQL Sever数据库导入Excel电子表格数据到SQL Sever数据库的方法 解决方案二: 呃.语法关键字不同的. 如果只是表的话. 建议把 Sql语句 整体 替换.sqlserver 中的 identify 关键字 替换为 : AUTO_IN

怎么让sql server中的sql语句自动换行

怎么让sql server中的sql语句自动换行呢? 如下图: 工具--选项--所有语言 查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/database/SQLServer/

SQL sever中的sqlbincol函数

问题描述 SQL sever中的sqlbincol函数 SQLRETURN SQLBindCol(SQLHSTMT StatementHandle, SQLUSMALLINT ColumnNumber,SQLSMALLINT TargetType, SQLPOINTER TargetValuePtr,SQLINTEGER BufferLength,SQLLEN * StrLen_or_Ind); 请问targettype若是SQL_C_FLOAT类型,StrLen_or_Ind应该是什么类型

sql server中如何将相同货物的两条数据的数量相加合成一条替代原始数据

问题描述 sql server中如何将相同货物的两条数据的数量相加合成一条替代原始数据 表中如图所示两条数据,按照mh,有相同的,则将两条数据的数量相加合并为一条,没有相同则不变,表中mh相同最多只有2条.怎么样得到 mh sl dw ck A2 100 A A 解决方案 select mh,dw,ck,sum(sl) from xxx group by mh,dw,ck 这样汇总出一个新的数据,用这个数据替换你原有的就好了 还可以将这些数据 select into 到一个新表,然后删除旧表,再

sql server-SqlServer 2008 R2 如何多行数据输出为一行

问题描述 SqlServer 2008 R2 如何多行数据输出为一行 大虾们,我这边现在有这样的一个需求,要从网页上导出数据,即从数据库里面找寻出数据再导出,两张表分别有AdminID关联,表里面的数据如图: 请问这样的能实现吗?求语句如何实现? 解决方案 使用xml path select name,adminid,(select Content from 资源跟踪表 where adminid=资源表.adminid from FOR XML PATH('')) Content from 资

Excel表格中每行数据下面插入一行的方法

Excel表格中每行数据下面插入一行的方法           方法一: 根据定位(快捷键F5),给空值插入行. 方法二:根据序号排序的方法.