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
您可能感兴趣
- sqlserver数据库同步复制(SqlServer将数据库中的表复制到另一个数据库)
- 利用数据库安装centos7(CentOS安装SQL Server vNext CTP1教程)
- mysqlexplain各个字段作用(MySQL EXPLAIN语句的使用示例)
- sqlserver带参数的存储过程(SQL Server 日期和时间的内部存储过程)
- SQL中case when的用法
- mysql清空数据库所有表格(MySQL用truncate命令快速清空一个数据库中的所有表)
- navicat连接mysql报错(解决Navicat Premium 连接 MySQL 8.0 报错"1251"的问题分析)
- 详解SqlServer数据库中Substring函数的用法(详解SqlServer数据库中Substring函数的用法)
- mysql基本查询方法(MySQL 重写查询语句的三种策略)
- php 数据库查询并写入(PHP实现单条sql执行多个数据的insert语句方法)
- sqlserver改表结构不允许(SQL Server阻止保存修改表结构的解决方法)
- mysql的使用步骤(MySQL infobright的安装步骤)
- mysql把重复数据删掉(mysql查找删除重复数据并只保留一条实例详解)
- mssql 存储过程查询语句(MSSQL分页存储过程完整示例支持多表分页存储)
- mysql里修改密码命令(MySQL修改账号密码方法大全小结)
- mysqlselect语句汇总(MySQL Select语句是如何执行的)
- 王牌部队,你看的剧情我看的时尚(你看的剧情我看的时尚)
- 被鉴定的古董价值300万 当心,你可能遇到诈骗了(被鉴定的古董价值300万)
- 英语难学吗(初中英语难学吗)
- 如何追女孩子(如何追女孩子的技巧和方法)
- 是不是快乐全被你拿走了(而是你得到的)
- 世界上只有妈妈好(世界上只有妈妈好的歌词)
热门推荐
- python 微信二维码接口(python实现微信防撤回神器)
- css中的float的使用
- sqlserver 开启数据库(SQLSERVER简单创建DBLINK操作远程服务器数据库的方法)
- vue移动端项目用什么打包工具(浅谈使用Vue完成移动端apk项目)
- centos8配置python开发环境(CentOS6.9 Python环境配置python2.7、pip、virtualenv)
- python排列组合计算方法(Python实现的排列组合、破解密码算法示例)
- 超级小旋风asp服务器软件使用图文教程(超级小旋风asp服务器软件使用图文教程)
- 图解python轻松快速掌握(10招!看骨灰级Pythoner玩转Python的方法)
- nginx日志配置详细教程(Nginx访问日志及错误日志参数说明)
- html5长图拖动(html5 拖拽及用 js 实现拖拽功能的示例代码)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9