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之行转列,删除多余连接符的主要内容,如果未能解决你的问题,请参考以下文章

Kettle 行列互换之——行转列(多列数据合并成一列变为多行)

使用自连接的方法实现行转列

sqlserver怎么行转列?

SQLServer pivot 行转列

行转列

MySQL 行转列 -》动态行转列 -》动态行转列带计算