我有下表,我正在转动:
(身份证,姓名,价值)
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值?
感谢您的时间。
答案 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
执行得很好。
我想我一定会错过你正在做的事情?