行转列(多行转一行)

1、创建表,并插入示例数据。

create table  students_info(
`SNO` string comment '学生编号',
`name` string comment '姓名',
`DEPART` string comment '选修课程'
)
-- 学生信息表数据插入
insert into students_info values
(103,'张三','心理学'),
(103,'张三','Java'),
(105,'王五','Spark'),
(109,'李麻子','Flink'),
(109,'李麻子','Kylin'); select * from students_info;

2、行转列

select
max(sno),
name,
concat_ws(',', collect_set(DEPART)) as DEPART
from students_info
group by name;

列转行(一行转多行)

1、创建表,并插入示例数据。

create table  students_info(
`SNO` string comment '学生编号',
`name` string comment '姓名',
`DEPART` string comment '选修课程'
) -- 成绩表数据插入
insert into students_info values
(103,'张三','心理学,Java'),
(105,'王五','Spark'),
(109,'李麻子','Flink,Kylin'); select * from students_info;

2、列转行

select SNO, name, add_DEPART
from students_info si
lateral view explode(split(si.DEPART,',')) b AS add_DEPART;

案例一

-- 源数据
101234 1 检查
101234 2 维修
101235 1 检查
101235 2 检查
101236 3 检查 -- 目标展示
101234 1-2 检查-维修
101235 1-2 检查
101236 3 检查

源数据的查询SQL

with tt_repair as (
select '101234' as repair_no, 1 as repair_type, '检查' as repair_plan
union all
select '101234' as repair_no, 2 as repair_type, '维修' as repair_plan
union all
select '101235' as repair_no, 1 as repair_type, '检查' as repair_plan
union all
select '101235' as repair_no, 2 as repair_type, '检查' as repair_plan
union all
select '101236' as repair_no, 3 as repair_type, '检查' as repair_plan
)
select repair_no
,concat_ws('-',collect_list(repair_type))
,concat_ws('-',collect_list(repair_plan))
from tt_repair
group by repair_no;

达成目标展示效果的SQL(case1)

select
s_id,
group_concat(age separator '-') age,
group_concat(distinct addr separator '-') addr
from
test_tidb.student_1 group by s_id;

达成目标展示效果的SQL(case2)

select
s_id,
concat_ws('-',collect_list(age)) as age,
concat_ws('-',collect_set(addr)) as addr
from
test.student_2
group by
s_id;

— 要养成终生学习的习惯 —

Hive - [06] 行转列,列转行的更多相关文章

  1. SQL Server 行转列,列转行。多行转成一列

    一.多行转成一列(并以","隔开) 表名:A 表数据: 想要的查询结果: 查询语句: SELECT name , value = ( STUFF(( SELECT ',' + va ...

  2. Sql server 中将数据行转列列转行(二)

    老规矩,先弄一波测试数据,数据填充代码没有什么意义,先折叠起来: /* 第一步:创建临时表结构 */ CREATE TABLE #Student --创建临时表 ( StuName ), --学生名称 ...

  3. hive行存储与列存储

    首先判断hive表是行存储还是列存储 判断方法: 1.使用hiveSQL"show create table table_name",这种方式,可以查看建表时候指定的那种方式; 2 ...

  4. Oracle 多行变一列的方法

    多行变一列的方法有很多,觉得这个第一眼看懂了当时就用的这个办法. 情况是这样的.以下数据前几列是一样的,需要把VAT_VALUE_CHAR 的值放在同一行上. SELECT * FROM ps_vat ...

  5. oracle 多行转多列查询

     oracle 多行转多列查询  ---create table Fruit(id int,name varchar(20), Q1 int, Q2 int, Q3 int, Q4 int);inse ...

  6. 如何获取ResultSet的行数和列数

    当我们执行数据库查询返回一个ResultSet的时候,很多情况下我们需要知道这个ResultSet的大小,即它的行数和列数.我们知道它的列数可以通过resultSet.getMetaData().ge ...

  7. MYSQL 多行转多列

    mysql 行变列(多行变成一行/多行合并成一行/多行合并成多列/合并行),我觉得这都是一个意思 数据库结构如图: 而我想让同一个人的不同成绩变成此人在这一行不同列上显示出来,此时分为2中展现: 第一 ...

  8. LayoutControl让一个控件占据多行或者多列

    拖动一个layoutcontrol到form上之后,会自动附带一个layoutgroup 设置layoutgroup的layoutmode为table 设置layoutgroup的OptionsTab ...

  9. StringGrid 实例2:1、获取 StringGrid 的行数、列数; 2、给单元赋值.

    实例2: 本例功能: 1.获取 StringGrid 的行数.列数; 2.给单元赋值. 运行效果图:

  10. POI中getLastRowNum() 和getLastCellNum()的区别 hssfSheet.getLastRowNum();//最后一行行标,比行数小1 hssfSheet.getRow(k).getLastCellNum();//获取列数,比最后一列列标大1

    hssfSheet.getLastRowNum();//最后一行行标,比行数小1 hssfSheet.getRow(k).getLastCellNum();//获取列数,比最后一列列标大1

随机推荐

  1. openEuler欧拉系统重置root密码

    步骤: 系统启动时,出现如下页面,按e进入内核编辑模式 进入如下页面 按下光标后,找到linux开头这一行,修改ro为rw,并在行尾添加init=/bin/sh,修改后效果如下,在crtl+x保存后开 ...

  2. 有关IOS内存读写冲突

    有关IOS内存读写冲突 在写内存相关代码时,获取已使用内存代码中报错 let hostPort: mach_port_t = mach_host_self() var host_size = mach ...

  3. 【C#】【平时作业】习题-13-数据类型

    目录 1. 什么是 ArrayList ,如何存放数据? 2. 什么 Queue ,如何存放数据? Queue 类的方法和属性 3. 什么 Stack ,如何存放数据? 4. 什么 Hashtable ...

  4. Qt开源作品11-屏幕录制控件

    一.前言 在平时的写作过程中,经常需要将一些操作动作和效果图截图成gif格式,使得涵盖的信息更全面更生动,有时候可以将整个操作过程和运行效果录制成MP4,但是文件体积比较大,而且很多网站不便于上传,基 ...

  5. JMeter使用指南+实验报告

    JMeter使用指南 目录 JMeter使用指南 界面基本配置方法 1.选项里的放大与缩小--缩放字体 2.选项里的选择语言 3.命令行的调出 注意事项 一些指标介绍 1.TCP取样器 2.汇总/聚合 ...

  6. VC++2008、2010、2012、2015、2017等IDE中如何设置命令行参数进行程序调试

    有时我们在写程序时会从命令行中直接读入参数,形如: int main(int argc,char**argv){ //your code here return 0; } 其实在vc2010 IDE中 ...

  7. 一套十万级TPS的IM综合消息系统的架构实践与思考

    本文由作者jhon_11分享,有大量修订和改动. 1.引言 如何设计一款高性能.高并发.高可用的im综合消息平台是很多公司发展过程中会碰到且必须要解决的问题.比如一家公司内部的通讯系统.各个互联网平台 ...

  8. JVM实战—12.OOM的定位和解决

    大纲 1.如何对系统的OOM异常进行监控和报警 2.如何在JVM内存溢出时自动dump内存快照 3.Metaspace区域内存溢出时应如何解决(OutOfMemoryError: Metaspace) ...

  9. MACOS 降级

    最近升级了macos 15.2,结果导致外接显示器显示不正常,经常断掉或者黑屏,因此macos进行降级处理: 1. 首先在App Store下载Ventura 系统; 2. 准备一个16G的U盘,然后 ...

  10. Harbor 共享后端高可用-简单版

    1. 主机配置 主机地址 主机配置 主机角色 软件版本 192.168.1.60 CPU:4C MEM:4GB Disk: 100GB Harbor+Keepalived Harbor 2.1.3 K ...