2017-03-09 17 views
0

この2つの属性の表があります(写真参照)。今私はPIVOTを使って私の仕事を成功させようとしています。別の列の値に基づいて行をピボットする列

は私が持っていると思います:SparePartListID=1

  • 2.
  • これが可能である達成するために、行にSparePartsListID=2に対応してすべてのWorkOperationsIDため

    • 1行上のすべてのWorkOperationID?ヘルプまたはROW_NUMBER()といくつかのdynmic SQLで

      enter image description here

    +0

    SparePartsList = 1よりも多くのSparePartsList = 1があります。 – McNets

    +0

    希望する出力の例を追加してください – Stephen

    答えて

    0

    。これは、そうでない場合は(それらの両方)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 ... 
    

    EDIT、あなたがDENSE列をしたいと仮定している - あなたはDYNAMICは、[拡張したくない場合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 
    
    関連する問題