버전 값 : 마이크로 소프트 SQL 서버 2014SQL 서버 : 일종의 동적 피벗과 LIKE 열에
나는 성공적으로 (도움) 동적 피벗 테이블을 만들었습니다, 지금은 열 이름과 값에 대한 질문이 있습니다 . 테이블이 선회 한 후
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
SELECT @cols = STUFF((SELECT distinct ','
+ QUOTENAME('Component_' + cast(rn as varchar(10)))
FROM dbo.table
CROSS APPLY
(SELECT row_number() over(partition by UPC order by ComponentNum) rn
FROM dbo.table) x
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
SET @query = 'SELECT UPC, ' + @cols + ' FROM
(
SELECT UPC, ComponentNum,
''Component_''
+ cast(row_number() over(partition by UPC order by ComponentNum) as varchar(10)) val
FROM dbo.table) x
PIVOT
(
MAX(ComponentNum)
FOR val IN (' + @cols + ')
) p '
execute(@query)
, 그것은
Component_X
27 개의 열을 만들었다.
27 개의 열은 고유 한 UPC 번호와 관련된 여러 종류의 부품을 나타냅니다. 모든 UPC가 27 가지 종류의 부품을 가지고있는 것은 아닙니다.
분할 된 UPC 번호 그룹의 행 번호가 피벗 열에 할당 된 행 번호에 따라 달라지는 것 같습니다.
필자는 피벗을 실행하기 전에 원본 데이터를 정렬해야한다는 것을 나타냅니다. 아래의 결과 표를 보면 부품 번호 543
이 다른 UPC 번호에 대해 Component_13
, Component_1
및 Component_10
아래에 표시됨을 알 수 있습니다.
ID UPC Component_13 Component_1 Component_10
------------------------------------------------------------------------
1 123 543 NULL 345
2 321 345 543 765
3 213 654 345 NULL
4 312 765 NULL 543
제 문제점은 부품 번호가 다른 열 사이에서 뜨는 것을 허용 할 수 없다는 것입니다. 부품 번호가 "Component_13"
유형이면 해당 열에 머물러 야합니다.
내 목표는 Component_X
의 각 반복이 특정 종류의 부품을 나타내는 것입니다.
Component_1 = Bolts
Component_2 = Nuts
Component_3 = Washers
다른 문제
내가 또한 소프트웨어의 다른 조각에 의해 검색을 위해 자신의 칼럼에 여러 개의 "볼트"부품 번호를 열거 할 필요가있다. UPC 번호는 부품 번호가 다른 크기가 다른 "볼트"를 가질 수 있습니다.ID UPC Bolt1 Bolt2 Bolt3 Nut1 Nut2
------------------------------------------------------------------------
1 123 1.5 1 NULL 0.5 .375
2 321 2.0 NULL NULL .625 NULL
3 213 0.25 .875 .375 NULL NULL
4 312 NULL NULL NULL 1.25 .625
이 아마 수 없습니다,하지만 난 사람이 용액에 도움을 줄 수 있는지 문의했다 : 같은
최종 결과 테이블을 볼 수 있었다.
@marc_s – McNets