hive之实现列转行

样例:

select * from tab1 limit 10;

结果:

id  num

a  1

a  2

a  3

b  4

b  3

·····

现在想实现把id一样的数据在一条数据中展现。

结果示例:

a  1  2  3

b  4  3

实现方案有多种,在Oracle中LISTAGG函数可以满足,excel中转置可以实现,

数据量不大的话,sql写的复杂些亦可以实现。

在hive中可以参照以下sql来实现:

select max(a.id),

concat_ws(‘\t‘,collect_set(a.num)) as result

from tab1 a

结果:

a  1  2  3

b  4  3

仅供参考!

时间: 2024-11-14 04:09:37

hive之实现列转行的相关文章

hive列转行 (collect_set())

一.问题 hive如何将 a       b       1 a       b       2 a       b       3 c       d       4 c       d       5 c       d       6 变为: a       b       1,2,3 c       d       4,5,6 二.数据 test.txt a       b       1 a       b       2 a       b       3 c       d    

hive列转行、行转列

1.列转行 select  t.cust_id          ,concat_ws(',',collect_list(group_id)) one_pace  from (select   'A_001' cust_id                       ,'20191014' group_id           union all           select   'A_001' cust_id                      ,'20191015' group_

行转列、列转行

一:行转列 模式:N行转一列  本实验N取31.建表SQL> create table grade(id int,name varchar2(10),subject varchar2(10),grade number(3));2.插入实验数据insert into grade values(1,'Andy','Yuwen',11);insert into grade values(2,'Andy','Math',22);insert into grade values(3,'Andy','Eng

Oracle行转列、列转行的Sql语句总结(转)

多行转字符串 这个比较简单,用||或concat函数可以实现 select concat(id,username) str from app_userselect id||username str from app_user 字符串转多列 实际上就是拆分字符串的问题,可以使用 substr.instr.regexp_substr函数方式 字符串转多行 使用union all函数等方式 wm_concat函数 首先让我们来看看这个神奇的函数wm_concat(列名),该函数可以把列值以",&quo

SQLServer处理行转列和列转行

掌握SQL Server 行转列和列转行 1.列转行 数据经过计算加工后会直接生成前端图表需要的数据源,但是程序里又需要把该数据经过列转行写入中间表中,下次再查询该数据时直接从中间表查询数据. 1.1 列换行语法 table_source UNPIVOT( value_column FOR pivot_column IN(<column_list>) ) 1.2  行转列案例 WITH T AS ( SELECT 1 as TeamId,'测试团队1' as Team,80 'MEN',20

做图表统计你需要掌握SQL Server 行转列和列转行

说在前面 做一个数据统计和分析的项目,每天面对着各种数据,经过存储过程从源表计算汇总后需要写入中间结果表以提高数据使用效率,那么此时就需要用到行转列和列转行. 1.列转行 数据经过计算加工后会直接生成前端图表需要的数据源,但是程序里又需要把该数据经过列转行写入中间表中,下次再查询该数据时直接从中间表查询数据. 1.1 列换行语法 table_source UNPIVOT( value_column FOR pivot_column IN(<column_list>) ) 1.2  行转列案例

内存数据库中列转行的应用,h2中列转行,hsqldb中列转行

其实列转行是比较简单的用sum和decode函数就可以了,但是我遇到的项目,不知道数据谁设计的居然字段里面还设计成long类型,此long类型与java中的不同,oracle中的long是指可变长二进制数据,最长2G,哎没办法只好转换了. 以下是hsqldb的转换,用到了转换函数convert,可以将long类型的转换为double类型,其中d.value是long类型,status是int类型,所以value需要转换 SELECT P.NAME,P.ID, SUM(DECODE(D.K_NAM

kettle中denormalizer(列转行)的使用

需要列转行的数据分为两种:有主键和无主键,先说无主键的 转以前的内容 转以后的内容 看到了吧,转过来了,好来张整体流程图 开始分析: 第一个图标打开后为 这是第一步里面主要的一步,这里配置好了就可以进行第二步了. 因为没有主键,所以要给城市那一列添加一个相同的主键,这样数据在转成行的时候就可以转到同一行了,如果主键不同,转成行后,每一个主键为一行,这不是我们想要的. 打开列转行的界面为 图中的dummy是我们前一步添加的常量,关键字段选择城市,关键字段值就为城市的value,数据字段为人数的ke

Oracle 列转行函数 Listagg()

这是一个Oracle的列转行函数:LISTAGG() 先看示例代码: Sql代码   with temp as( select 'China' nation ,'Guangzhou' city from dual union all select 'China' nation ,'Shanghai' city from dual union all select 'China' nation ,'Beijing' city from dual union all select 'USA' nat