kettle如何实现列转行


本文主要记录kettle列转行控件的使用。

 

 原数据:

    目标数据:

 

 


1、用例脚本

create TABLE studentInfo
(
    studentno int,
    Cname varchar(10),
    grade int
);
insert into studentInfo values(2018100,'语文',81);
insert into studentInfo values(2018100,'数学',82);
insert into studentInfo values(2018100,'英语',83);

insert into studentInfo values(2018101,'语文',71);
insert into studentInfo values(2018101,'数学',71);
insert into studentInfo values(2018101,'英语',72);

insert into studentInfo values(2018102,'语文',91);
insert into studentInfo values(2018102,'数学',92);
insert into studentInfo values(2018102,'英语',93);


INSERT INTO studentInfo VALUES(2018103,'语文',60);
INSERT INTO studentInfo VALUES(2018103,'数学',61);
INSERT INTO studentInfo VALUES(2018103,'英语',94);
commit;

ktr文件如下所示:

 

 


表输入

 

 


SELECT studentno,Cname,grade FROM studentInfo order by studentno

列转行

 

 

 




excel文件输出

 

 



运行后,excel文件内容

 

 



 

相当于sql语句:

SELECT *
FROM
(SELECT studentno, cname,grade
    FROM studentInfo) AS SourceTable
PIVOT
(
AVG(grade)
FOR Cname IN ([语文], [数学], [英语])
) AS PivotTable;

附: UNPIVOT

select * from () sourceTable UNPIVOT (计算列 for 新列名 in 原列名list) as UPV

例如:--Unpivot the table.
SELECT VendorID, Employee, Orders
FROM
   (SELECT VendorID, Emp1, Emp2, Emp3, Emp4, Emp5
   FROM pvt) p
UNPIVOT
   (Orders FOR Employee IN
      (Emp1, Emp2, Emp3, Emp4, Emp5)
)AS unpvt;
GO

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM