TSQL 中的交叉表透视与分组依据和排序依据

Cross tab Pivot in TSQLwith group by and order by

我在 MS Access 中有一个交叉选项卡查询,我想在 T-SQL 中复制它, T-SQL table '#tmpZSPO_DMD' 具有部件、位置、数量、会计月期间。当我 运行 时,数据如下所示。

Part LOCATION   Qty FiscalMonthPeriod
123 4040_0086       1        CON00
123 4040_0086       1   CON00
123 4200_0010       1   CON00
123 2070_0060       2   CON01
123 2080_0061      1    CON01
123 4040_0070      1    CON02
123 4040_0070      2    CON02
123 4040_0086      1    CON02
123 2020_0060      2    CON03
123 2020_0064      1    CON03
123 2040_0060      1    CON03
123 4040_0061      1    CON03
123 4040_0061      1    CON03
123 4040_0069      1    CON03
123 4040_0070      1    CON03

我希望达到以下结果。

Part    LOCATION    CON00   CON01   CON02   CON03
123 2020_0060                                2
123 2020_0064                                1
123 2040_0060                                1
123 2070_0060                2      
123 2080_0061                1      
123 4040_0061                                 2
123 4040_0069                                 1
123 4040_0070                        3        1
123 4040_0086        2               1  
123 4200_0010        1  

一个非常简单的 PIVOT 就可以完成这项工作。

SELECT *
FROM
(
    SELECT Part, LOCATION, Qty, FiscalMonthPeriod
    FROM @Table
) t
PIVOT
(
    SUM(Qty)
    FOR FiscalMonthPeriod IN ([CON00], [CON01], [CON02], [CON03])
) p
   SELECT tm.PART, tm.Location,
   SUM(IIF(tm.FiscalMonthPeriod= 'CON00', [Sum], NULL)) As CON00,
   SUM(IIF(tm.FiscalMonthPeriod= 'CON01', [Sum], NULL)) As CON01,
   SUM(IIF(tm.FiscalMonthPeriod= 'CON02', [Sum], NULL)) As CON02,
   SUM(IIF(tm.FiscalMonthPeriod= 'CON03', [Sum], NULL)) As CON03
     FROM #tmpZSPO_DMD tm
     GROUP BY tm.PART, tm.Location;
Select Part
      ,LOCATION
      ,ISNULL(CON00 , 0) AS CON00
      ,ISNULL(CON01 , 0) AS CON01
      ,ISNULL(CON02 , 0) AS CON02
      ,ISNULL(CON03 , 0) AS CON03
FROM tablename T 
  PIVOT (SUM(Qty)
         FOR FiscalMonthPeriod
         IN(CON00 , CON01, CON02, CON03)
         )p