SQL函数将某个字段合并在一起的操作

 更新时间:2021年01月22日 16:11:01   作者:Megamind_HL  
这篇文章主要介绍了SQL函数将某个字段合并在一起的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

最近遇到需要将关联表中的某个字段全部查询出来并且重新组合为一个字段,这个时候普通的连接查询就满足不了需求了,需要用到SQL函数来完成:

ALTER function dbo.getResCodesByOwnerId(@OwnerId INT)
returns nvarchar(2000)
as
begin
DECLARE @codes VARCHAR(2000)
SET @codes=''
select @codes=stuff((select ','+residence_code from crm_owner co left join crm_owner_residence cor on co.id=cor.owner_id where co.id=@OwnerId for xml path('')),1,1,'')
return @codes
END

拿id = 2 的数据来做测试,得到结果:

select (数据库名).getResCodesByOwnerId(fr.owner_id) as room_code
from t1 fr left join t2 frd on fr.owner_id=frd.owner_id

结果:

1101010105,11GU002,1101010104

补充:SQL STUFF函数 拼接字符串

今日看到一篇文章,是关于和并列的,也研究了下,还是不错的

要这种效果。

create table tb(idint, value varchar(10))
insert into tbvalues(1,'aa')
insert into tbvalues(1,'bb')
insert into tbvalues(2,'aaa')
insert into tbvalues(2,'bbb')
insert into tbvalues(2,'ccc')
go
 
/*     stuff(param1, startIndex, length, param2)

说明:将param1中自startIndex(SQL中都是从1开始,而非0)起,删除length个字符,然后用param2替换删掉的字符。*/

SELECT id,
           value = stuff
             ((SELECT   ',' + value
               FROM     tb AS t
               WHERE   t .id = tb.id FOR xml path('')), 1, 1, '')
FROM     tb
GROUP BY id

这样即可。

收集的资料

/* 
标题:按某字段合并字符串之一(简单合并) 
作者:(十八年风雨,守得冰山雪莲花开) 
地点:广东深圳 
 
描述:将如下形式的数据按id字段合并value字段。 
id  value 
----- ------  
1   aa 
1   bb 
2   aaa 
2   bbb 
2   ccc 
需要得到结果: 
id   value 
------ -----------  
1   aa,bb 
2   aaa,bbb,ccc 
即:group by id, 求 value 的和(字符串相加) 
*/ 
--1、sql2000中只能用自定义的函数解决  
create table tb(id int, value varchar(10)) 
insert into tb values(1, 'aa') 
insert into tb values(1, 'bb') 
insert into tb values(2, 'aaa') 
insert into tb values(2, 'bbb') 
insert into tb values(2, 'ccc') 
go 
 
create function dbo.f_str(@id varchar(10)) returns varchar(1000) 
as 
begin 
 declare @str varchar(1000) 
 select @str = isnull(@str + ',' , '') + cast(value as varchar) from tb where id = @id 
 return @str 
end 
go 
 
--调用函数  
select id , value = dbo.f_str(id) from tb group by id 
 
drop function dbo.f_str 
drop table tb  
 
--2、sql2005中的方法  
create table tb(id int, value varchar(10)) 
insert into tb values(1, 'aa') 
insert into tb values(1, 'bb') 
insert into tb values(2, 'aaa') 
insert into tb values(2, 'bbb') 
insert into tb values(2, 'ccc') 
go  
select id, [value] = stuff((select ',' + [value] from tb t where id = tb.id for xml path('')) , 1 , 1 , '') 
from tb 
group by id  
drop table tb 
  
--3、使用游标合并数据  
create table tb(id int, value varchar(10)) 
insert into tb values(1, 'aa') 
insert into tb values(1, 'bb') 
insert into tb values(2, 'aaa') 
insert into tb values(2, 'bbb') 
insert into tb values(2, 'ccc') 
go 
declare @t table(id int,value varchar(100))--定义结果集表变量  
--定义游标并进行合并处理  
declare my_cursor cursor local for 
select id , value from tb 
declare @id_old int , @id int , @value varchar(10) , @s varchar(100) 
open my_cursor 
fetch my_cursor into @id , @value 
select @id_old = @id , @s='' 
while @@FETCH_STATUS = 0 
begin 
  if @id = @id_old 
    select @s = @s + ',' + cast(@value as varchar) 
  else 
   begin 
    insert @t values(@id_old , stuff(@s,1,1,'')) 
    select @s = ',' + cast(@value as varchar) , @id_old = @id 
   end 
  fetch my_cursor into @id , @value 
END 
insert @t values(@id_old , stuff(@s,1,1,'')) 
close my_cursor 
deallocate my_cursor 
 
select * from @t 
drop table tb 

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

相关文章

  • MySQL数据库开发的36条原则(小结)

    MySQL数据库开发的36条原则(小结)

    这篇文章主要介绍了MySQL数据库开发的36条原则(小结),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • mysql8.0.18下安装winx64的详细教程(图文详解)

    mysql8.0.18下安装winx64的详细教程(图文详解)

    这篇文章主要介绍了安装mysql-8.0.18-win-x64的详细教程,本文图文并茂给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-11-11
  • MySQL表的增删改查(CRUD)

    MySQL表的增删改查(CRUD)

    这篇文章主要介绍了如何对数据库增删改查,想要更全面了解的小伙伴,可以详细阅读本文
    2023-03-03
  • 关于MySql数据库Update批量更新不同值的实现方法

    关于MySql数据库Update批量更新不同值的实现方法

    这篇文章主要介绍了关于MySql数据库Update批量更新不同值的实现方法,数据库管理系统可以通过SQL管理数据库,定义和操作数据,维护数据的完整性和安全性,需要的朋友可以参考下
    2023-05-05
  • mysql中mvcc的具体使用

    mysql中mvcc的具体使用

    MVCC多版本并发控制是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问,本文主要介绍了mysql中mvcc的具体使用,感兴趣的可以了解一下
    2024-09-09
  • 使用mysqldump实现mysql备份

    使用mysqldump实现mysql备份

    mysqldump客户端可用来转储数据库或搜集数据库进行备份或将数据转移到另一个SQL服务器(不一定是一个MySQL服务器)。今天我们就来详细探讨下mysqldump的使用方法
    2016-11-11
  • MySQL数据权限的实现详情

    MySQL数据权限的实现详情

    这篇文章主要介绍了MySQL数据权限的实现详情,文章通过实际案例,从代码实战的角度来实现这样的一个数据权限。具体详细介绍,具有一定的参考价值
    2022-08-08
  • MySQL 存储过程的基本用法介绍

    MySQL 存储过程的基本用法介绍

    我们大家都知道MySQL 存储过程是从 MySQL 5.0 开始逐渐增加新的功能。存储过程在实际应用中也是优点大于缺点。不过最主要的还是执行效率和SQL 代码封装。特别是 SQL 代码封装功能,如果没有存储过程。
    2010-12-12
  • Mysql索引的类型和优缺点详解

    Mysql索引的类型和优缺点详解

    这篇文章主要为大家详细介绍了Mysql索引的类型和优缺点,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • 详解MySQL中InnoDB的存储文件

    详解MySQL中InnoDB的存储文件

    本篇是一篇关于MySQL专题知识点的内容,详细讲述了InnoDB的存储文件的相关内容,感兴趣的朋友学习下。
    2018-02-02

最新评论