kettle之行转列,删除多余连接符
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了kettle之行转列,删除多余连接符相关的知识,希望对你有一定的参考价值。
参考技术A 最近在看行转列的内容,这边记录一下。数据集如下:
最终的效果如下:
2、在进行行转列之前需要先按分组字段进行排序,这个在关闭控件时软件也会提示
可以发现空值字段也被连接,最后的效果还不是很理想,接下去要把多余的逗号去掉
5、字符串替换,删除头部和中间多余的逗号,这边用到了正则表达式
效果如下
步骤3:利用剪切字符串,删除末尾的逗号【剪切字符串这个控件这边有点奇怪,起始位置设为-1,结束位置要设的很小(绝对值不小于该字段值的长度最大值)才能取到除最后一个字符的数据,设0和-1,会得到最后一个字符。。。】
效果如下
最后效果如下
Sql2008的行列转换之行转列
今天在工作的时候遇到了行列转换的问题,记得去年有一段时间经常写,但是许久不用已经记不太得了。好记性不如烂笔头,忙完之后赶紧记录一下。
关键字:PIVOT(行转列),UNPIVOT(列转行)
先说说 PIVOT(行转列)这是我今天遇到的问题
PIVOT(行专列)
主要语法:PIVOT(聚合函数(列) FOR 列 in (…) )AS P
完整语法:
table_source
PIVOT(
聚合函数(value_column)
FOR pivot_column
IN(<column_list>)
)
举例(这个最重要,没有例子只有概念的文章,不是好文章)
我这里有一张表
其中OperationDate这里一列是日期,要求是:对日期进行分组,统计Testuser每天的操作。最重要的是日期要做为列名显示,如下图
直接贴sql语句
DECLARE @columnNme NVARCHAR(4000)
SELECT @columnNme = ISNULL(@columnNme + \',\', \'\') + QUOTENAME(CONVERT(varchar(100), [OperationDate], 23)) FROM [Test].[dbo].[OperationData]
group by CONVERT(varchar(100), [OperationDate], 23)
order by CONVERT(varchar(100), [OperationDate], 23)
--select(@columnNme )
---上面一部分,是取出不重复的日期,一会儿要做为列名, QUOTENAME是在“xxxx-xx-xx”这种不规则的列名合法化,它会变成[xxxx-xx-xx] , 加了两个[ ]
Declare @sql NVARCHAR(4000)
set @sql = \'select * from
(
SELECT od.UserName
,CONVERT(varchar(100), od.[OperationDate], 23) as 日期
,COUNT(1) as 浏览数
FROM [Test].[dbo].[OperationData] as od
group by CONVERT(varchar(100), od.[OperationDate], 23),od.UserName
) as t
pivot (
max(浏览数) for 日期
in (\'+@columnNme +\')
) as result\'
--select(@sql)
EXEC( @sql)
这种写法是列名数量不固定的时候,需要动态生成。
下面是静态列名,也就是列名的数量是固定的
select * from
(
SELECT od.UserName,CONVERT(varchar(100),od.[OperationDate], 23) as 日期,COUNT(1) as 浏览数
FROM [Test].[dbo].[OperationData] as od
group by CONVERT(varchar(100), od.[OperationDate], 23),od.UserName
) as t
pivot (
max(浏览数) for 日期
in
(
[2016-05-21],
[2016-05-22],
[2016-05-23]
)
) as result
以上是关于kettle之行转列,删除多余连接符的主要内容,如果未能解决你的问题,请参考以下文章