2014-08-27 67 views
-1

我收到此错误信息:整理问题与UNPIVOT查询

的类型与在UNPIVOT列表中指定的其他 列的类型列“fi_description”的冲突。

SELECT fi_contactid, 
     question, 
     answer 
FROM (SELECT soi.fi_contactid, 
       soi.statuscode, 
       fi_description = soi.fi_description COLLATE database_default, 
       soi.fi_elevationissuecode, 
       soi.fi_identifiedby 
     FROM ficrm_mscrm.dbo.fi_soiissuebase AS soi WITH (nolock)) p 
     UNPIVOT (question 
       FOR answer IN (statuscode, 
           fi_description, 
           fi_elevationissuecode, 
           fi_identifiedby)) AS unpt 

fi_contactid是唯一标识符
fi_description是nvarchar的(255)
fi_elevationissuecode被INT
有 fi_identifieby被唯一标识符

是事端g我在unpivot语句中做了排序错误?

+2

那么,'UNPIVOT'假定每列中的'IN'具有相同的数据类型(或至少,兼容)。 – Lamak 2014-08-27 20:37:58

回答

1

UNPIVOT将承担在IN列表中的第一列是FOR字段的数据类型,并尝试直接施放到该类型,这可能会或可能无法正常工作。

您需要更改IN子句的顺序(如果直接强制转换将起作用),或者在子查询中将每列转换为相同类型。

这里是一个解决方案的任何实施例:

SELECT fi_contactid, 
     question, 
     answer 
FROM (SELECT soi.fi_contactid, 
       CONVERT(VARCHAR(255), soi.statuscode) statuscode, 
       fi_description = soi.fi_description COLLATE database_default , 
       CONVERT(VARCHAR(255), soi.fi_elevationissuecode) fi_elevationissuecode, 
       CONVERT(VARCHAR(255), soi.fi_identifiedby) fi_identifiedby 
     FROM ficrm_mscrm.dbo.fi_soiissuebase AS soi WITH (nolock)) p 
     UNPIVOT (question 
       FOR answer IN (statuscode, 
           fi_description, 
           fi_elevationissuecode, 
           fi_identifiedby)) AS unpt