Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何在SSIS中使用Pivot对行进行分组(基于CustomerID)?_Sql Server_Ssis_Sql Server 2008 R2_Bids - Fatal编程技术网

Sql server 如何在SSIS中使用Pivot对行进行分组(基于CustomerID)?

Sql server 如何在SSIS中使用Pivot对行进行分组(基于CustomerID)?,sql-server,ssis,sql-server-2008-r2,bids,Sql Server,Ssis,Sql Server 2008 R2,Bids,我正在练习SSI,目前正在进行Pivot转换。这是我正在做的。 我用以下数据创建了一个数据源(表名:Pivot) 使用SSI,我创建了一个包,用于旋转数据,使其具有以下列 PersonID---Product1---Product2---Product3 这里是我所在的位置,我能够创建透视数据到文本文件。但是输出不是按PersonID分组的 我当前的输出是 正如我们所看到的,转换并不基于 设置键(PersonID:PivotUsage=1) 我希望得到的结果是 其中数据根据PersonID

我正在练习SSI,目前正在进行Pivot转换。这是我正在做的。 我用以下数据创建了一个数据源(表名:Pivot)

使用SSI,我创建了一个包,用于旋转数据,使其具有以下列

PersonID---Product1---Product2---Product3

这里是我所在的位置,我能够创建透视数据到文本文件。但是输出不是按PersonID分组的

我当前的输出是

正如我们所看到的,转换并不基于 设置键(PersonID:PivotUsage=1)

我希望得到的结果是

其中数据根据PersonID进行分组

我错过了什么

编辑: 回到前面的例子,我对输入数据重新排序如下


每次输入数据是否都需要按此顺序/模式?我遇到的大多数例子都遵循类似的模式

是的,输入数据需要按照您所关注的内容进行排序:

为了高效地透视数据,这意味着在数据库中创建尽可能少的记录 尽可能输出数据集,输入数据必须在轴上排序 专栏。如果数据未排序,则Pivot转换可能会失败 为set键中的每个值生成多个记录,这是 定义集合成员资格的列。例如,如果数据集是 以名称列为轴,但名称未排序,输出 对于每个客户,数据集可以有多行,因为 每次名称中的值更改时都会发生透视


这是对MSDN文档的直接引用。(增加了重点。)

当我第一次读到这个答案时,我认为排序后的列应该是pivot中PivotUsage=2的列。这就是我对轴心柱的理解。然而,最终对我有效的是按pivot usage=1的列进行排序。如果手工编写sql,我会根据这个专栏进行分组。

Hmm。。。。好的,我会检查一下材料。但是如果我们没有对输入数据的控制/访问权,如果有替代使用pivot的方法。要获得类似的结果,如果您无法控制源数据,可以将排序转换放在pivot的上游。您需要足够的内存来对整个集合进行排序。如果它是一个较大的集合,而您没有足够的内存,您也可以批量加载到一个表中,然后将其用作源,并在查询中使用order by(或在“排序键”列上创建聚集索引),ISORTED设置为true,SortKeyPosition设置为适当的值。@BRAIN:谢谢您的输入。我将使用pivot练习这两个转换。那么我的流量挖掘应该是这样的:源>排序>枢轴>目的地?@TanmoyDB:是的,应该可以。如果您确实遇到内存问题,请参阅我之前评论的后半部分。@Brian:谢谢您的帮助。:)