hive的行转列和列转行

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hive的行转列和列转行相关的知识,希望对你有一定的参考价值。

参考技术A 如下图:

1、列转行,即table1查询出table2

select

    `order_id`,

    concat_ws(',', collect_list(`item_sku_id`))

from

    table1

group by

    `order_id`;

2、行转列,即table2查询出table1

select

    `order_id`,

    `item_sku_id`

from

    table2 lateral view explode(split(item_sku_id), ',') as table as item_sku_id;

sql的行转列和列转行

一、行转列

1、测试数据准备

 
CREATE  TABLE [StudentScores]
(
   [UserName]         NVARCHAR(20),        --学生姓名
   [Subject]          NVARCHAR(30),        --科目
   [Score]            FLOAT,               --成绩
)

INSERT INTO [StudentScores] SELECT \'张三\', \'语文\', 80
INSERT INTO [StudentScores] SELECT \'张三\', \'数学\', 90
INSERT INTO [StudentScores] SELECT \'张三\', \'英语\', 70
INSERT INTO [StudentScores] SELECT \'张三\', \'生物\', 85
INSERT INTO [StudentScores] SELECT \'李四\', \'语文\', 80
INSERT INTO [StudentScores] SELECT \'李四\', \'数学\', 92
INSERT INTO [StudentScores] SELECT \'李四\', \'英语\', 76
INSERT INTO [StudentScores] SELECT \'李四\', \'生物\', 88
INSERT INTO [StudentScores] SELECT \'码农\', \'语文\', 60
INSERT INTO [StudentScores] SELECT \'码农\', \'数学\', 82
INSERT INTO [StudentScores] SELECT \'码农\', \'英语\', 96
INSERT INTO [StudentScores] SELECT \'码农\', \'生物\', 78
 

2、行转列sql

 
SELECT * FROM [StudentScores] /*数据源*/
AS P
PIVOT 
(
    SUM(Score/*行转列后 列的值*/) FOR 
    p.Subject/*需要行转列的列*/ IN ([语文],[数学],[英语],[生物]/*列的值*/)
) AS T
 

执行结果:

二、列转行

1、测试数据准备

 
CREATE TABLE ProgrectDetail
(
    ProgrectName         NVARCHAR(20), --工程名称
    OverseaSupply        INT,          --海外供应商供给数量
    NativeSupply         INT,          --国内供应商供给数量
    SouthSupply          INT,          --南方供应商供给数量
    NorthSupply          INT           --北方供应商供给数量
)

INSERT INTO ProgrectDetail
SELECT \'A\', 100, 200, 50, 50
UNION ALL
SELECT \'B\', 200, 300, 150, 150
UNION ALL
SELECT \'C\', 159, 400, 20, 320
UNION ALL
 

2、列转行的sql

 
SELECT P.ProgrectName,P.Supplier,P.SupplyNum
FROM 
(
    SELECT ProgrectName, OverseaSupply, NativeSupply,
           SouthSupply, NorthSupply
     FROM ProgrectDetail
)T
UNPIVOT 
(
    SupplyNum FOR Supplier IN
    (OverseaSupply, NativeSupply, SouthSupply, NorthSupply )
) P
 

执行结果:

 

以上是关于hive的行转列和列转行的主要内容,如果未能解决你的问题,请参考以下文章

Hive 行转列和列转行

sql的行转列和列转行

oracle的行转列和列转行

sql面试:sql中的行转列和列转行

hive关于行转列,列转行的使用

MySQL行转列与列转行