列的类型" Change_Date"与UNPIVOT列表

时间:2016-11-10 11:13:59

标签: sql unpivot

与Unpivot有一些问题但不确定原因。我知道列类型需要相同,我想我已将其排序。

CREATE TABLE [dbo].[zztmp1](
[Project_Number] [varchar](50) NULL,
[Changed_Design_Status] [varchar](50) NULL,
[Changed_Cost] [decimal](38, 4) NULL,
[Change_Date] [varchar](8) NULL
) ON [PRIMARY]

脚本

select  
Project_Number, 
ColumnName, Value, Change_Date
from
(
  select Project_Number, 
   Changed_Design_Status ,    
   cast(Changed_Cost as varchar(50)) Changed_Cost,
   cast(Change_Date as varchar(50)) Change_Date
  from zztmp1
) d
unpivot
(
  Value FOR 
  ColumnName in ( Changed_Design_Status-- ,Changed_Cost
  )
) unpiv;

在我添加Change_Cost时出现错误:

Msg 8167,Level 16,State 1,Line 15 列的类型" Changed_Cost"与UNPIVOT列表中指定的其他列的类型冲突。

如果我更改订单并使用change_Cost运行它可以正常工作。当我有多个列时,这似乎是一个问题,我在做什么。

任何建议表示赞赏。

谢谢

1 个答案:

答案 0 :(得分:0)

我发现使用cross apply

进行忽略更容易
select z.Project_Number, v.ColumnName, v.Value, z.Change_Date
from zztmp1 z outer apply
     (values ('Changed_Cost', cast(Changed_Cost as varchar(50)) ),
             ('Changed_Design_Status', cast(Changed_Design_Status as varchar(50)) )
     ) v(ColumnName, Value);

在您的情况下,它可能与Changed_Design_Status的类型有关。