2014-08-27 19 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