基于另一列中的值将数据透视移动到列的行
问题描述:
所以我有这个表的两个属性(见图片)。现在我一直试图使用PIVOT来完成我的任务,但没有成功。基于另一列中的值将数据透视移动到列的行
我想有:
- 在一行上所有
WorkOperationID
为SparePartListID=1
- 所有
WorkOperationsID
对应于SparePartsListID=2
在第2行。
这是可能实现?
答
随着帮助或ROW_NUMBER()和一些中对动态SQL。这是假设你想致密列,否则删除Partition By SparePartsListID
(两者)
Declare @SQL varchar(max) = Stuff((Select Distinct ',' + QuoteName(RN) From (Select Distinct RN=Row_Number() over (Partition By SparePartsListID Order by WorkOperationID) From YourTable) A Order by 1 For XML Path('')),1,1,'')
Select @SQL = '
Select [SparePartsListID],' + @SQL + '
From (
Select *
,RN=Row_Number() over (Partition By SparePartsListID Order by WorkOperationID)
From YourTable
) A
Pivot (max(WorkOperationID) For [RN] in (' + @SQL + ')) p'
Exec(@SQL);
返回
SparePartsListID 1 2 3 4 ...
1 101282 101344 101398 NULL ...
2 84108 84921 85528 86228 ...
编辑 - 如果你不想动态延伸[ 1],[2],[3],[4],...,[n]
Select *
From (
Select *
,RN=Row_Number() over (Partition By SparePartsListID Order by WorkOperationID)
From YourTable
) A
Pivot (max(WorkOperationID) For [RN] in ([1],[2],[3],[4])) p
还有更多SparePartsList = 2比SparePartsList = 1 – McNets
添加所需输出的示例 – Stephen