sql中行列互換

2021-07-11 02:49:22 字數 1622 閱讀 5456

基本思路:行轉列用case when,再加上聚合函式如max、sum等;  列轉行用union all。

針對不同的資料庫,也會有現成的函式使用,下面是hql中行列例子:

**:  

一、行轉列

1、問題

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 

2、資料

test.txt

a       b       1 

a       b       2 

a       b       3 

c       d       4 

c       d       5 

c       d       6 

3、答案

1.建表

drop table tmp_jiangzl_test;

create table tmp_jiangzl_test

(col1 string,

col2 string,

col3 string

)row format delimited fields terminated by '\t'

stored as textfile;

load data local inpath '/home/jiangzl/shell/test.txt' into table tmp_jiangzl_test; 

2.處理 

select col1,col2,concat_ws(',',collect_set(col3)) 

from tmp_jiangzl_test  

group by col1,col2; 

二、列轉行

1、問題

hive如何將

a       b       1,2,3

c       d       4,5,6 

變為:a       b       1

a       b       2

a       b       3

c       d       4

c       d       5

c       d       6

2、答案

1.建表

drop table tmp_jiangzl_test;

create table tmp_jiangzl_test

(col1 string,

col2 string,

col3 string

)row format delimited fields terminated by '\t'

stored as textfile;

處理:select col1, col2, col5

from tmp_jiangzl_test a 

lateral  view explode(split(col3,','))  b as col5

SQL(行列互換)

有乙個sql題在面試中出現的概率極高,最近有學生出去面試仍然會遇到這樣的題目,在這裡跟大家分享一下。題目 資料庫中有一張如下所示的表,表名為sales。年 季度銷售量 1991111 1991212 1991313 1991414 1992121 1992222 1992323 1992424 要求...

SQL行列互換

有乙個sql題在面試中出現的概率極高,在這裡跟大家分享一下。題目 資料庫中有一張如下所示的表,表名為sales。年 季度銷售量 1991111 1991212 1991313 1991414 1992121 1992222 1992323 1992424 要求 寫乙個sql語句查詢出如下所示的結果。...

SQL行列互換

題目 資料庫中有一張如下所示的表,表名為sales。年 季度銷售量 1991111 1991212 1991313 1991414 1992121 1992222 1992323 1992424 要求 寫乙個sql語句查詢出如下所示的結果。年 一季度二季度 三季度四季度 1991 1112 1314...