使用kettle行转列


生成测试数据

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[test](
    [id] [int] NULL,
    [name] [varchar](20) NULL,
    [quarter] [int] NULL,
    [profile] [int] NULL
) ON [PRIMARY]

GO
SET ANSI_PADDING OFF
GO
INSERT [dbo].[test] ([id], [name], [quarter], [profile]) VALUES (1, N'a', 1, 1000)
GO
INSERT [dbo].[test] ([id], [name], [quarter], [profile]) VALUES (1, N'a', 2, 2000)
GO
INSERT [dbo].[test] ([id], [name], [quarter], [profile]) VALUES (1, N'a', 3, 4000)
GO
INSERT [dbo].[test] ([id], [name], [quarter], [profile]) VALUES (1, N'a', 4, 5000)
GO
INSERT [dbo].[test] ([id], [name], [quarter], [profile]) VALUES (2, N'b', 1, 3000)
GO
INSERT [dbo].[test] ([id], [name], [quarter], [profile]) VALUES (2, N'b', 2, 3500)
GO
INSERT [dbo].[test] ([id], [name], [quarter], [profile]) VALUES (2, N'b', 3, 4200)
GO
INSERT [dbo].[test] ([id], [name], [quarter], [profile]) VALUES (2, N'b', 4, 5500)
GO

总体结构如下:

第一步 :新建转换,在"核心转换"里的"输入"选择"表输入",连接数据库,编写sql语句

第二步:在"转换"里选择步骤"列转行"

图中箭头指向,关键字值为原表中关键字段的取值,对字段要记得聚合操作

第三步:字段选择,修改字段名称

第四步:空操作

完成后点击键盘"F9",查看结果如下

另附上数据库查询方法:

SELECT id,
       name,
       [1] AS "Q1",
       [2] AS "Q2",
       [3] AS "Q3",
       [4] AS "Q4"
FROM TEST
    PIVOT
    (
        SUM(profile)
        FOR quarter IN ([1], [2], [3], [4])
    ) AS pvt;