sql怎么查询字段合并(SQL函数将某个字段合并在一起的操作)
类别:数据库 浏览量:2774
时间:2022-01-17 01:41:36 sql怎么查询字段合并
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 |
以上为个人经验,希望能给大家一个参考,也希望大家多多支持开心学习网。如有错误或未考虑完全的地方,望不吝赐教。
原文链接:https://blog.csdn.net/Megamind_HL/article/details/79977566
您可能感兴趣
- mysql慢日志设置多少合适(MySQL慢查询日志的作用和开启)
- mysql实验总结分析(MySQL查询截取的深入分析)
- mysql主从复制步骤(MySQL8 主从复制踩坑指南)
- mysql导出数据的方法
- mysql集群是用什么搭建的(MySQL5.7 集群配置的步骤)
- 数据库sql语句大全及例题(数据库之SQL技巧整理案例)
- mysql3种日志(mysql中的7种日志小结)
- mysql全套优化(Mysql优化神器推荐)
- mysql的默认事务隔离级别(啥是 MySQL 事务隔离级别?)
- mysql演示事务提交(MySQL找出未提交事务的SQL实例浅析)
- mysql char和varchar区别(MySQL CHAR和VARCHAR存储、读取时的差别)
- mysql游标的使用(MySQL 游标的作用与使用相关)
- mybatis 分页查询配置(mybatis-plus分页传入参数后sql where条件没有limit分页信息操作)
- SQL SERVER书签查找
- mysql索引如何使用(MySQL 索引和数据表该如何维护)
- sqlserverlog原理(sql server中错误日志errorlog的深入讲解)
- 经常发这三种 朋友圈 的人,要迅速屏蔽(经常发这三种朋友圈)
- 有种尴尬叫朋友圈忘屏蔽,大学生上演社死现场,父母亲自下场吐槽(有种尴尬叫朋友圈忘屏蔽)
- 朋友圈屏蔽你的人,可以直接看淡了(朋友圈屏蔽你的人)
- 金球奖只青睐那些会戴珠宝的女人(金球奖只青睐那些会戴珠宝的女人)
- 浙江省一个县,人口超40万,建县历史超1100年(浙江省一个县人口超40万)
- 五代十国南唐历代国君(五代十国南唐历代国君)
热门推荐
- dede调用tag标签(dedecms tag标签实现随机颜色和字体大小)
- python3.7.2 详细安装教程(python3.5安装python3-tk详解)
- mysql explain的用法
- python查找含特定字符的字符串(Python实现查找字符串数组最长公共前缀示例)
- centos7可以装mysql吗(详解腾讯云CentOS7.0使用yum安装mysql及使用遇到的问题)
- DataRow转换时对DBNULL的处理
- vuex原理及使用方法(Vuex状态机的快速了解与实例应用)
- nginx动态路径配置(Nginx本地目录映射实现代码实例)
- tomcat作用及原理(详解Tomcat常用的过滤器)
- mysql中提取日期的函数是什么(MySQL获得当前日期时间函数示例详解)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9