1

我有下表,我正在旋转:

(ID、名称、值)

1, '任务 ID', 123

1、“语言”、“Java”

2, '任务 ID', 456

我已将 PivotKey 设置为 Name 列,并将 PivotedValue 设置为 Value 列。对于我的每个新列(任务 ID 和语言),我已将它们的 PivotKeyValue 分别设置为“任务 ID”和“语言”。我的包在上面的数据下运行良好,pivot 操作的结果是:

(ID、任务 ID、语言)

1, 123, '爪哇'

2, 456, 空

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

(ID、名称、值)

1、空、空

2、空、空

我得到的错误信息是:

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

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

谢谢你的时间。

4

2 回答 2

2

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

一片空白 (,

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

于 2009-01-12T04:37:58.793 回答
0

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

创建表数据表(Id INT,名称 Nvarchar(40),值 Nvarchar(40))

插入数据表值(1,'TaskID','123')插入数据表值(1,'语言','Java')插入数据表值(2,'TaskID','456')

SELECT id,[TaskID],[Language] FROM (SELECT ID,[Name],[Value] FROM DataTable) AS s PIVOT (MAX(Value) FOR [Name] IN ([TaskID],[Language])) AS p

DROP TABLE 数据表

结果:

id TaskID 语言 1 123 Java 2 456 NULL

但是,当我运行时:

创建表数据表(Id INT,名称 Nvarchar(40),值 Nvarchar(40))

插入数据表值(1,NULL,NULL) 插入数据表值(2,NULL,NULL)

SELECT id,[TaskID],[Language] FROM (SELECT ID,[Name],[Value] FROM DataTable) AS s PIVOT (MAX(Value) FOR [Name] IN ([TaskID],[Language])) AS p

DROP TABLE 数据表

结果:

id TaskID 语言 1 NULL NULL 2 NULL NULL

这执行得很好。

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

于 2009-02-24T17:45:13.100 回答