表結構如下:
idvalue
-----------
1aa
1bb
2aaa
2bbb
2ccc
結果如下:
idvalues
-----------------
1aa,bb
2aaa,bbb,ccc
*/
createtabletb(idint,valuevarchar(10))
insertintotbvalues(1,'aa')
insertintotbvalues(1,'bb')
insertintotbvalues(2,'aaa')
insertintotbvalues(2,'bbb')
insertintotbvalues(2,'ccc')
go
------------------------------------------------------------
--1.sql2000舊方法:利用函數
createfunctiondbo.f_str(@idint)
returnsvarchar(8000)
as
begin
declare@rvarchar(8000)
set@r=''
select@r=@r+','+valuefromtbwhereid=@id
returnSTUFF(@r,1,1,'')
end
go
selectid,value=dbo.f_str(id)fromtbgroupbyid
------------------------------------------------------------
--2.sql2000舊方法:另一個函數
createfunctionf_hb(@idint)
returnsvarchar(8000)
as
begin
declare@strvarchar(8000)
set@str=''
select@str=@str+','+cast(valueasvarchar)fromtbwhereid=@id
set@str=right(@str,len(@str)-1)
return(@str)
end
go
selectdistinctid,dbo.f_hb(id)asvaluefromtb
------------------------------------------------------------
--3.sql2005:outerapply
selectA.id,B.[newValues]from
(selectdistinctidfromtb)A
outerapply
(
select[newValues]=stuff(replace(replace(
(
select[value]fromtbN
whereid=A.id
forxmlauto
),'<Nvalue="',','),'"/>',''),1,1,'')
)B
/*
注:APPLY是在一个查询的FROM子句中指定的新的关系运算符。
它允许您对外部表的每一行调用表值函数,可选地使用外部表的列作为函数的参数。
APPLY运算符有两种形式:CROSSAPPLY和OUTERAPPLY。
如果表值函数为其返回一个空集合的话,前者不返回外部表的行,而后者则返回一个NULL值的行而不是函数的列。*/
------------------------------------------------------------
--4.sql2005:forxmlpath
selectid,[values]=stuff((select','+[value]fromtbtwhereid=tb.idforxmlpath('')),1,1,'')
fromtb
groupbyid
引用自:http://www.haogongju.net/art/782866
分享到:
相关推荐
可将分组后的一列值合并为一个字段,经常用于一些会计科目的显示
sql 多行合并某一列字符串拼接的示例语句
SQL实现两张无关联表的数据列合并在一张结果集中实现思路。
sql自定义函数,用于合并字符串列,可以在分组的情况下对varchar类型的字段合并
可以实现多行查询数据转换到一行上显示,多行的某列信息用“,”号隔开。
合并列值
行可随时变成列,没列都可随意转成行,显示数据时行列可互换,合并了GrideView单元格 实现类似Excel效果
Sql函数 将列合并成一串字符串 从此以后,本人上传的资源全部免费下载,以便大家互相学习. 往前上传的资源有些设置了下载分,如需要请联系QQ:285679784,免费获取
很多人可能发现,无论是在sql 2000,还是在sql 2005 中,都没有提供字符串的聚合函数,所以,当我们在处理下列要求时,会比较麻烦,但在SQL Server 2005中,这种情况得到了改善,本文介绍了在SQL Server 2005中完成...
昨天遇到一个SQL Server的问题:需要写一个储存过程来处理几个表中的数据,最后问题出在我想将一个表的一个列的多行内容拼接成一行,比如表中有两列数据 : 类别 名称 AAA 企业1 AAA 企业2 AAA 企业3 ...
SQL语句用with将列分割成多列存为临时表,再将多行某个字段拼接合并为一行
Sql function 多行中的列合并为一行一列的方法,需要的朋友可以参考下。
该工具用于Sql的脚本的合并:用法,打开后,指定一个目录:会把该目录下面所有扩展名为.sql的文件(命名规则见后面描述)按类型(视图、触发器、函数、过程)和文件名排序列出;指定输出文件位置及名字,点击合并,...
Mysql、oracle、Sybase数据库两列合并成一列的sql语句
sql学习 合并重复行 定义新的列为其添加数据 新组成的表安某字段排序 只复制表结构 分页语句
sybase数据库是不支持group_concat函数的,此文件为sybase存储过程样例,可以将多行信息按标识合并为一行多列。
两个不同的表进行查询,需要把结果合并, 比如table1的列为 id, user_id, type_id,pro_id; table2的列为 id,user_id,collect_id;分别如下图所示 table1: table2: 将两个表的查询结果合并到一起的查询语句为 ...
该工具利用Excel快速生成SQL Server和MySQL的临时表、多行快速合 1、支持SQL Server和MySQL的with语句以及临时表 2、支持自定义至多3列 ...4、支持多行数据快速合并成单行模式,支持一键去除双引号
有时候会遇到这种情况,数据库查询返回多行记录,且每行记录由另外符合条件的多条记录内容合并,遇到这种情况,我们可以选择下面两种方式
│ │ 5.1.1 标识列与普通列互相转换的示例.sql │ │ 5.2.1 查表法按日期生成流水号的示例.sql │ │ 5.2.1 查表法生成流水号的示例.sql │ │ 5.2.2 使用编号表按日期生成流水号的示例.sql │ │ 5.2.2 使用编号表...