【发布时间】:2016-12-11 20:22:12
【问题描述】:
有人可以帮我解决这个问题吗?我收到一个错误提示
“名称”列的类型与其他列的类型冲突 在 UNPIVOT 列表中指定
我尝试将名称转换为 varchar,但没有任何效果。
;with hd (id, name, parentid, category)
as
(
select CAPABILITY_COMPONENT_ID id, CAPABILITY_COMPONENT_NAME name, CAPABILITY_PARENT_ID as parentid, 1 as category
from [dbo].[TDM_FCT_CPBLITY]
where CAPABILITY_PARENT_ID = -1
union all
select t1.CAPABILITY_COMPONENT_ID, t1.CAPABILITY_COMPONENT_NAME, t1.CAPABILITY_PARENT_ID, hd.category +1
from [dbo].[TDM_FCT_CPBLITY] t1
inner join hd
on t1.CAPABILITY_PARENT_ID = hd.id
)
select category categoryNumber
into #temp
from hd
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT distinct ',' + quotename('cat_'+cast(categoryNumber as varchar(10))+'_'+col)
from #temp
cross apply (select 'id' col
union all
select 'name' col) src
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = ';with hd (id, name, parentid, category)
as
(
select CAPABILITY_COMPONENT_ID as id, CAPABILITY_COMPONENT_NAME as name, CAPABILITY_PARENT_ID as parentid, 1 as category
from [dbo].[TDM_FCT_CPBLITY]
where CAPABILITY_PARENT_ID = -1
union all
select t1.CAPABILITY_COMPONENT_ID, t1.CAPABILITY_COMPONENT_NAME, t1.CAPABILITY_PARENT_ID, hd.category +1
from [dbo].[TDM_FCT_CPBLITY] t1
inner join hd
on t1.CAPABILITY_PARENT_ID = hd.id
),
unpiv as
(
select value, ''cat_''+cast(category as varchar(5))+''_''+ col col_name
from
(
select cast(id as varchar(17)) id, name, parentid, category
from hd
) src
unpivot
(
value for col in (id, name)
) un
)
select '+@cols+'
from unpiv
pivot
(
max(value)
for col_name in ('+@cols+')
) piv'
execute(@query)
drop table #temp
【问题讨论】:
-
拒绝投票和/或关闭请求的一个原因可能是,Why is my code not working? 明确命名为 What is 不所以 find details here
-
能否添加 CREATE TABLE 语句和一些插入值?
-
我可以建议你只显示最后的@query 语句,不带引号吗?
标签: sql-server