충돌

2016-12-07 4 views
0

누군가가 나이 문제를 해결하는 데 도움이 수 있습니까? 나는충돌

내가 varchar에 이름을 캐스팅하기 위해 노력했다

UNPIVOT 목록에 지정된 다른 열 의 유형 열 "이름"갈등의 유형,하지만 아무것도 없다는 오류를 얻고있다 일했다.

;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 '[email protected]+' 
       from unpiv 
       pivot 
       (
       max(value) 
       for col_name in ('[email protected]+') 
       ) piv' 

execute(@query) 

drop table #temp 
+2

수 있습니다 downvotes 및/또는 폐쇄 요청에 대한 한 가지 이유, 즉 * 왜 내 코드가 작동하지? * 명시 적에서 첫 번째 점으로 이름 * 무엇 ** ** SO * ([여기에서 자세한 내용을 확인할]하지 HTTP : //stackoverflow.com/help/on-topic) – Shnugo

+0

당신은 TABLE 문 일부 삽입 가치를 창출 추가 할 수 있을까요? – McNets

+0

따옴표없이 마지막 @query 문만 표시하도록 제안 할 수 있습니까? – McNets

답변

0

UNPIVOT은 데이터를 unpopot하는 가장 좋은 방법은 아닙니다.

는보다 효율적으로 구현하기가 덜 복잡, 그것은 훨씬 더 나은 방법이다 "값으로 적용 CROSS"와 코드의 UNPIVOT 섹션을 교체합니다.