本文主要记录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