2016-11-10 175 views
0

在Unpivot存在一些問題並且不確定原因。我知道列類型需要是相同的,我想我有這種排序。「Change_Date」列的類型與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在我得到的錯誤:

消息8167,級別16,狀態1,行15 列的類型「 Changed_Cost「與UNPIVOT列表中指定的其他列的類型衝突。

如果我改變順序,只用change_Cost運行就可以正常工作。這似乎是一個問題,當我有多列,我在做什麼。

任何意見讚賞。

感謝

+0

這是SQL Server的假設嗎? –

回答

0

我覺得這樣更容易使用cross apply UNPIVOT:

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類型做。

+0

該語法是否正確。我得到:Msg 102,Level 15,State 1,Line 5 ','附近的語法不正確。 – user1106857

+0

@ user1106857。 。 。如果放入正確的括號,這是正確的。 –