与unpivot查询的排序规则问题

时间:2014-08-27 20:18:01

标签: sql sql-server tsql unpivot

我收到此错误消息:

  

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

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是 uniqueidentifier
fi_description是 nvarchar (255)
fi_elevationissuecode是 int
fi_identifieby是 uniqueidentifier

在unpivot声明中是否存在我的排序错误?

1 个答案:

答案 0 :(得分: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