sql查询 ,多行数据合并成一行,并且显示合并后某一列的值拼接结果
2016-03-04 16:49
706 查看
方法一:自定义函数
定义Aggregate_BaseMateriel函数
GO
Create FUNCTION Aggregate_BaseMateriel(@ShipMentNo varchar(50))
RETURNS varchar(1024)
AS
BEGIN
declare @Str varchar(1024)
set @Str = ''
select @Str = @Str + ' ◆ ' + [BaseMateriel] from tb_SendShipMent_Detail
where [ShipMentNo] = @ShipMentNo
return @Str
END
GO
然后就可以写sql语句查询了,通过按ShipMentNo分组查询,得到明细中BaseMateriel的拼接结果
select detail.ShipMentNo,dbo.AggregateBaseMateriel(ShipMentNo) as materielList
from tb_SendShipMent_Detail detail
where ShipMentNo = 'XOUT20150928002'
group by detail.ShipMentNo
但是这种方法缺点是,如果多表查询,或者穿插在子查询里的话,查询速度会非常慢
--------------------------------------------------------------------------------------------------------------------------------------
方法二:使用stuff + for xml path
select [value] = stuff((select '◆'+[BaseMateriel] from tb_SendShipMent_Detail detail
where detail.ShipMentNo = 'XOUT20150928002' for xml path('')), 1, 1, '')
其中stuff的作用是:删除指定长度的字符,并在指定的起点处插入另一组字符
语法:STUFF
( character_expression , start , length ,character_expression )
列:SELECT
STUFF('abcdef', 2, 3, 'ijklmn')
结果为:aijklmnef
FOR XML PATH 有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现
select BaseMateriel from tb_SendShipMent_Detail 的结果为:
但是如果换成 :select BaseMateriel from tb_SendShipMent_Detail for
xml path(''),结果为:
让我们来稍微改良一下,得到自己想要的拼接结果:
select '◆' + BaseMateriel from tb_SendShipMent_Detail for
xml path('')
方法二无论操作简易度和查询速度都是比方法一要好
定义Aggregate_BaseMateriel函数
GO
Create FUNCTION Aggregate_BaseMateriel(@ShipMentNo varchar(50))
RETURNS varchar(1024)
AS
BEGIN
declare @Str varchar(1024)
set @Str = ''
select @Str = @Str + ' ◆ ' + [BaseMateriel] from tb_SendShipMent_Detail
where [ShipMentNo] = @ShipMentNo
return @Str
END
GO
然后就可以写sql语句查询了,通过按ShipMentNo分组查询,得到明细中BaseMateriel的拼接结果
select detail.ShipMentNo,dbo.AggregateBaseMateriel(ShipMentNo) as materielList
from tb_SendShipMent_Detail detail
where ShipMentNo = 'XOUT20150928002'
group by detail.ShipMentNo
但是这种方法缺点是,如果多表查询,或者穿插在子查询里的话,查询速度会非常慢
--------------------------------------------------------------------------------------------------------------------------------------
方法二:使用stuff + for xml path
select [value] = stuff((select '◆'+[BaseMateriel] from tb_SendShipMent_Detail detail
where detail.ShipMentNo = 'XOUT20150928002' for xml path('')), 1, 1, '')
其中stuff的作用是:删除指定长度的字符,并在指定的起点处插入另一组字符
语法:STUFF
( character_expression , start , length ,character_expression )
列:SELECT
STUFF('abcdef', 2, 3, 'ijklmn')
结果为:aijklmnef
FOR XML PATH 有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现
select BaseMateriel from tb_SendShipMent_Detail 的结果为:
但是如果换成 :select BaseMateriel from tb_SendShipMent_Detail for
xml path(''),结果为:
让我们来稍微改良一下,得到自己想要的拼接结果:
select '◆' + BaseMateriel from tb_SendShipMent_Detail for
xml path('')
方法二无论操作简易度和查询速度都是比方法一要好
相关文章推荐
- mysql主主(基于bin-log)
- 不安装oracle客户端,如何运行sqlplus
- SQL Server读懂语句运行的统计信息
- yum安装mysql
- dos命令行连接数据库 oracle11g
- 定义表的约束
- oracle 11g sqlplus不是内部或外部命令
- 【MySQL新手必看】百宝云的MySQL数据库基础知识
- Oracle Connect by 用法解析
- NoSQL Manager for MongoDB 破解
- 查看ORACLE中正在运行的存储过程 kill
- mysql 主从
- iOS-SQLite数据库表链接
- mysql互主自动化配置脚本
- c# mysql getstring getdatatable 需要MySql.Data.dll
- MySQL中的几个函数
- Redis与Memcached的incr/decr差异对比
- 图解Nosql(HBase)与传统数据库的区别
- oracle中导出表的结构和数据
- MySQL:索引工作原理及索引的用法