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数字类型自增的坑)
- windows 安装解压版 mysql5.7.28 winx64的详细教程(windows 安装解压版 mysql5.7.28 winx64的详细教程)
- mysql发生系统错误(MySQL too many connections错误的原因及解决)
- 修改mysql安装服务名称(Apache为mysql以及自己的项目设置虚拟路径)
- 修改mysql默认超时(MySQL sql_mode修改不生效的原因及解决)
- mysql语句详解(详解记录MySQL中lower_case_table_names的坑)
- sqlserver实例全库备份(sql server通过脚本进行数据库压缩全备份的方法推荐)
- sql数据分页怎么查询(SQL数据分页查询的方法)
- phpmysql网站开发入门与提高(PHP+MySQL+sphinx+scws实现全文检索功能详解)
- vscode开发数据库(Vscode上使用SQL的方法)
- mysql的默认数据库例子在哪里(修改MySQL8.0 默认的数据目录快捷操作无配置)
- mysql报错103(解决Mysql报Invalid default value for“operate_time”错误的问题)
- mysql 操作日志(MySQL中的undo日志)
- sqlserver怎么调成混合登录(如何快速删掉SQL Server登录时登录名下拉列表框中的选项)
- dedecms标签长度(dedecms使用SQL命令批量替换指定字符串的方法)
- 三杨 共辅四朝帝王,构建明帝国内阁行政圈(三杨共辅四朝帝王)
- 红色文化进国企(红色文化进国企)
- 车友的选择| 轮毂该如何选(车友的选择轮毂该如何选)
- 秦海璐炫耀和王新军热恋蜜事,不料对方吐槽她吃饱后肚子撅老高(秦海璐炫耀和王新军热恋蜜事)
- 秦海璐一袭旗袍惹人倾心,将高级与淡雅展现的游刃有余(秦海璐一袭旗袍惹人倾心)
- 门外之见 海蛎子味 的表演,能走多远(门外之见海蛎子味)
热门推荐
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9