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索引介绍(浅析SQL Server的聚焦使用索引和查询执行计划)
- sqlparameter的用法介绍
- mysql索引失效的几种情况(MySql范围查找时索引不生效问题的原因分析)
- sqlserver常用的字符串函数(SqlServer 获取字符串中小写字母的sql语句)
- sqlserver备份还原地址(SqlServer高版本数据备份还原到低版本)
- mysql怎么看脱机数据(MYSQL电话号码,身份证数据脱敏的实现)
- mysql中mergeinto的用法(MySQL中exists、in及any的基本用法)
- sqlserver怎么查看数据库版本(Sql Server数据库各版本功能对比)
- mysql 高效分页(MySQL 分页查询的优化技巧)
- mysqlupdate语句用法(MySQL update set 和 and的区别)
- mysql返回结果集函数(mysql 判断是否为子集的方法步骤)
- 查询mysql 死锁(MySQL线上死锁分析实战)
- mysql查询条件的优化(MySQL查询优化之查询慢原因和解决技巧)
- mysql怎么使用null(MySQL null与not null和null与空值''''的区别详解)
- sql server中的死锁
- dedecms统计功能(DedeCMS sql 调用数字递增标签以及修改方法)
- 原创图画书,以儿童视角讲述中国故事(以儿童视角讲述中国故事)
- 八月再见 愿你岁月不扰,余生静好(八月再见愿你岁月不扰)
- 赏读 八月再见,九月你好(赏读八月再见九月你好)
- 散文 八月再见,九月,我在风中等你(散文八月再见九月)
- 8月再见 9月你好(8月再见)
- 魔兽世界 设计师爆料,原始版本并无PVP,跨阵营属于返璞归真(魔兽世界设计师爆料)
热门推荐
- SqlServer 英文单词全字匹配详解及实现代码(SqlServer 英文单词全字匹配详解及实现代码)
- mysqlreplace用法(细说mysql replace into用法)
- python datetime模块是什么(Python中时间datetime的处理与转换用法总结)
- web服务器iis安全访问机制(IIS与APACHE实现HTTP重定向到HTTPS)
- python零基础入门详细教程(Python零基础入门学习之输入与输出)
- web界面设计的建议
- pythonexcel报表实例(对python生成业务报表的实例详解)
- html5单选项怎么调选项间距(html5实现输入框fixed定位在屏幕最底部兼容性)
- docker 部署参数配置(Docker搭建Redis5.0并挂载数据)
- 如何解决php跨域问题(php简单检测404页面的方法示例)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9