在MS SQL Server 2005中使用数据透视转换时出错

时间:2009-01-05 18:18:57

标签: sql-server ssis pivot

我有下表,我正在转动:

(身份证,姓名,价值)

1,'任务ID',123

1,'语言','Java'

2,'任务ID',456

我已将PivotKey设置为Name列,将PivotedValue设置为Value列。对于我的每个新列(任务ID和语言),我已将其PivotKeyValue分别设置为“任务ID”和“语言”。我的包运行正常,上面的数据,枢轴操作的结果是:

(ID,任务ID,语言)

1,123,'Java'

2,456,NULL

但是,当我在以下源数据上运行包时,我遇到了问题:

(身份证,姓名,价值)

1,NULL,NULL

2,NULL,NULL

我得到的错误信息是:

[Pivot [4511]]错误:数据透视表值“(无法转换为字符串)”无效。 [DTS.Pipeline]错误:SSIS错误代码DTS_E_PROCESSINPUTFAILED。组件“Pivot”(4511)上的ProcessInput方法失败,错误代码为0xC0202090。标识的组件从ProcessInput方法返回错误。该错误特定于组件,但错误是致命的,将导致数据流任务停止运行。在此之前可能会发布错误消息,其中包含有关失败的更多信息。

我认为这意味着pivot操作无法处理PivotKey列'Name'中的NULL值,因为它尚未配置为处理该值。问题是我不知道该怎么做。如何检测和处理输出列('输入和输出属性'表单)的PivotKeyValue属性中的NULL值?

感谢您的时间。

2 个答案:

答案 0 :(得分:2)

NULL导致问题,因为您无法将表或结果集的列名设置为NULL,而PIVOT运算符正在尝试这样做。您必须在预先转动(或未转动)的数据上使用ISNULL运算符。

ISNULL(,

通常你会做类似ISNULL(value,0)的事情。

答案 1 :(得分:0)

我可以使用以下脚本重新创建您的初始位置:

CREATE TABLE DataTable(Id INT,Name Nvarchar(40),Value Nvarchar(40))

INSERT DataTable VALUES(1,'TaskID','123') INSERT DataTable VALUES(1,'Language','Java') INSERT DataTable VALUES(2,'TaskID','456')

SELECT id,[TaskID],[Language] FROM(    SELECT ID,[Name],[Value] FROM DataTable    )AS 枢 (MAX(值)FOR [名称] IN([TaskID],[语言]))AS p

DROP TABLE DataTable

结果:

id TaskID语言 1 123 Java 2 456 NULL

但是当我跑步时:

CREATE TABLE DataTable(Id INT,Name Nvarchar(40),Value Nvarchar(40))

INSERT DataTable VALUES(1,NULL,NULL) INSERT DataTable VALUES(2,NULL,NULL)

SELECT id,[TaskID],[Language] FROM(    SELECT ID,[Name],[Value] FROM DataTable    )AS 枢 (MAX(值)FOR [名称] IN([TaskID],[语言]))AS p

DROP TABLE DataTable

结果:

id TaskID语言 1 NULL NULL 2 NULL NULL

执行得很好。

我想我一定会错过你正在做的事情?