sql中的列变行、行变列操作
在日常取数或者数据处理中,我们会遇到需要把一列变多行的数据拆分操作,或者是需要把多行变一列的合并操作,接下来,就总结下在sql中通过lateral view explode()和concat_ws()/collect_set()的处理方法。
一列变多行lateral view explode()
假设有这样一个 表1(table_1):
id | tag |
---|---|
43fjkdlj | tag1|tag2|tag6 |
757jhidf | tag3|tag5 |
863hskdh | tag1|tag9|tag10|tag11 |
从表中可以看出一个id对应的tag标签有多个,想要把它拆分开,变成以下 表2(table_2):
id | tag |
---|---|
43fjkdlj | tag1 |
43fjkdlj | tag2 |
43fjkdlj | tag6 |
757jhidf | tag3 |
757jhidf | tag5 |
863hskdh | tag1 |
863hskdh | tag9 |
863hskdh | tag10 |
863hskdh | tag11 |
那么就可以使用lateral view explode()实现:
select id,tag_1
from table_1 lateral view explode(split(tag,'\\|'))tag as tag_1
上述语句中explode()里可以说明分隔符是什么,对于"|"注意转义符,所以是“\\|”
多行变一列concat_ws()/collect_set()
但如果是上述表2要转换成表1的格式,就需要做合并操作,实现如下:
select id,concat_ws('\\|',collect_set(tag)) as tag
from table_2
group by id
concat_ws()可以根据指定连接符,上述语句也可以使用“-”连接,看自己需要和方便极客,要强调的是合并操作使用collect_set(),最后,不要忘记group by哦!
好了,就到这里吧,有问题欢迎大家留言评论~
sql中的列变行、行变列操作相关推荐
- 张同学的 SQL中对材料报价单的数据权限进行操作 (如列转行 行转列的处理) 学习一下....
SQL中对材料报价单的数据权限进行操作 (如列转行 行转列的处理) --可以直接放到查询分析器执行 --判断测试表TmpTCIQuote是否有存在 不存在则创建 if NOT exists (sele ...
- Sql中存储过程的定义、修改和删除操作
Sql中存储过程的定义.修改和删除操作 1.存储过程的分类 系统存储过程 本地存储过程(用户自定义) 临时存储过程(局部[#].全局[##]临时存储过程) 2.创建存储过程 ? 1 2 3 4 5 6 ...
- Hive SQL中的concat、concat_ws、concat_group列转行,行转列
目录 1.concat函数,concat_ws函数,concat_group函数 CONCAT() 函数 2.CONCAT_WS(SEPARATOR ,collect_set(column)) 等价于 ...
- 利用SQL中的递归返回多行数据的连接
有个数据表testC,数据为 col ---------------------------------- ...
- oracle逗号隔开行转列_oralce逗号分割变多行 Oracle中REGEXP_SUBSTR函数
Oracle中REGEXP_SUBSTR函数 Oracle 中REGEXP_SUBSTR函数的使用说明: 题目如下:在 oracle 中,使用一条语句实现将'17,20,23'拆分成'17','20' ...
- Hive SQL 中ARRAY或MAP类型数据处理:lateral view explode()/posexplode()——行转列函数
前言:在对表数据进行批量处理过程中,常常碰上某个字段是一个array或者map形式的字段,一列数据的该字段信息同时存在多个值,当我们需要取出该数组中的每一个值实现一一对应关系的时候,可以考虑使用lat ...
- SQL中的行转列和列转行
导读 SQL是IT行业很多岗位都要求具备的一项能力,对于数据岗位而言更是如此,甚至说扎实的SQL基础也往往是入职这些岗位的必备技能.而在SQL面试中,一道出镜频率很高的题目就是行转列和列转行的问题,可 ...
- oracle逗号隔开行转列_oralce逗号分割变多行-Oracle
oralce逗号分割变多行 方法一 select a.* , REGEXP_SUBSTR(a.rolecode ,'[^,]+',1,l) AS rolecode from p_user a,(S ...
- Excel如何将表转换为另一种格式的表(表1转换为表2),表转换的绿色工具,支持一行变多行,多行变一行,行变列,列边行等等
将表格式转换的 Excel在线绿色工具 支持一行变多行,多行变一行,行变列,列边行等等 Excel如何把一个表格快速转化成想要的另一个格式,使用下面的工具 (注意要使用谷歌浏览器) 地址:www.ex ...
最新文章
- 五角大楼公布UFO报告,不明飞行物到底是什么?(全文)
- 工厂三兄弟之简单工厂模式(二)
- 在Ubuntu 14.04中使SublimeText 3支持中文输入法
- C#3.0 Sepcification(中英文对照) (转)
- centos安装redis并客户端连接_Linux(Centos)之安装Redis及注意事项
- 自定义控件--CircleImageView(类似于QQ、微信圆形头像自定义控件)
- Struts2.0 + Spring2.5 + Hibernate3.3开发环境的配置(1)
- python实现QQ机器人(自动登录,获取群消息,发送群消息)
- U盘文件夹被隐藏,如何让去除文件夹隐藏属性
- 芯片验证漫游指南_【福利】海思校招数字芯片机考参考资料
- pandas 常见写法
- centos7下显卡型号查询
- 推荐几个练习键盘打字的工具【自己用过的】
- 输入年和月,判断该月有多少天
- Invalid HTTP_HOST header: ‘testserver‘. You may need to add ‘testserver‘ to ALLOWED_HOSTS
- 工具-安装redis和安装redis客户端
- 信息安全的马其顿防线
- 那些年啊,那些事——一个程序员的奋斗史 ——114
- TUI轻松实现中国农历日历
- gfoj 22的应急救援