Kettle實現行轉列1(場景)

2021-08-11 18:14:08 字數 3186 閱讀 8583

1.固定列數

create

tablet1(

studentno int

,subject 

varchar2(10

),grade int );

insert

into

t1 values(1

,'語文',80

);insert

into

t1 values(1

,'數學',82

);insert

into

t1 values(1

,'英語',84

);insert

into

t1 values(2

,'語文',70

);insert

into

t1 values(2

,'數學',74

);insert

into

t1 values(2

,'英語',76

);insert

into

t1 values(3

,'語文',90

);insert

into

t1 values(3

,'數學',93

);insert

into

t1 values(3

,'英語',94

);commit

;sql> select * from t1;

studentno subject         grade

---------- ---------- ----------

1 語文               80

1 數學               82

1 英語               84

2 語文               70

2 數學               74

2 英語               76

3 語文               90

3 數學               93

3 英語               94

已選擇9行。

select     studentno 學號,

sum(decode(subject,'語文',grade,null)) 語文,

sum(decode(subject,'數學',grade,null)) 數學,

sum(decode(subject,'英語',grade,null)) 英語

from t1 group by studentno;

學號       語文        數學       英語

----- ---------- ---------- ----------

1         80         82         84

2         70         74         76

3         90         93         94

使用相關子查詢的方式:

select studentno,

(select grade from t1 v2 where v2.studentno=t1.studentno and v2.subject='語文') 語文,

(select grade from t1 v2 where v2.studentno=t1.studentno and v2.subject='數學') 數學,

(select grade from t1 v2 where v2.studentno=t1.studentno and v2.subject='英語') 英語

from t1 group by studentno;

2.不定列數

create

tablet2(

keyint

,value

varchar2(10

));insert

into

t2 values(1

,'我');

insert

into

t2 values(1

,'是');

insert

into

t2 values(1

,'誰');

insert

into

t2 values(2

,'知');

insert

into

t2 values(2

,'道');

insert

into

t2 values(3

,'不');

commit

;sql

>

select

*fromt2;

keyvalue

---------- ----------

1 我1 是

1 誰2 知

2 道3 不

已選擇6行。

with v1 as

(select key,value,row_number() over(partition by key order by key) r from t2

),v2 as 

(select max(sys_connect_by_path(value,' ')) result from v1 start with r=1 connect by r=prior r+1 and key=prior key group by key

)select * from v2;

result

------------------

我 是 誰

知 道不

如果oracle版本是11gr2,那麼可以使用listagg函式,可以方便很多。

with v1 as

(select key

,value

,row_number()

over

(partition by key order by key

)r from t2),

v2 as 

(select listagg

(value

,','

)within group 

(order by r

)result from v1 group by key

)select 

*from v2;

**:

SQL實現行轉列

需求 用sql實現行轉列。如下圖所示 行顯示的資料轉換成列顯示 實現行轉列的sql指令碼如下 select date format last day date format now y m d y m d as 業務日期,max case index code when ind20101001 th...

Mysql實現行轉列

create table loc loc varchar 50 xiaoqu varchar 50 addr varchar 50 company varchar 50 插入資料 區域 小區名稱 房屋位址 中介公司寶山 慶安三村 綏化路52弄a寶山 月浦十村 月浦十村67號b寶山 盛橋三村 盛橋三村...

pandas實現行轉列

hive進行大資料分析資料經常用到行轉列,pandas也可以的。不解釋直接上 coding utf 8 import pandas as pd c df pd.dataframe c print df df left df key df values 0 df values str.split ex...