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
我在 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