【发布时间】:2017-08-24 12:33:58
【问题描述】:
有什么方法可以旋转 2 列?我已经使用 1 列作为枢轴的基础进行了动态枢轴,但这次我无法弄清楚。
这是我的表架构:
CREATE TABLE [dbo].[ProdOrders]
(
[ItemCode] [nvarchar](50) NULL,
[ReleasedDate] [date] NULL,
[PlanQty] [float] NULL,
[ActualQty] [float] NULL
)
我填满表格:
INSERT INTO [dbo].[ProdOrders]([ItemCode], [ReleasedDate], [PlanQty], [ActualQty])
VALUES
('0D203-22882-079','2017-08-18',12654,4218),
('0D203-22882-079','2017-08-23',15758,5253),
('0D203-22882-079','2017-08-27',26263,8754),
('0D203-22882-079','2017-09-02',7354,2451),
('0D301-05422-079','2017-08-18',31144,10381),
('0D301-05422-079','2017-08-18',20612,6871),
('0D301-05422-079','2017-08-23',25765,8588),
('0D301-05422-079','2017-08-29',19582,6527),
('0D301-05422-079','2017-09-04',15459,5153),
('0D203-22882-079','2017-09-22',5232,1744),
('0D203-22882-079','2017-09-28',13236,4412),
('0D203-22882-079','2017-10-03',7693,2564),
('0D301-05422-079','2017-09-23',24735,8245),
('0D301-05422-079','2017-09-27',19561,6520),
('0D301-05422-079','2017-09-06',23755,7918),
('0D301-05422-079','2017-09-14',23755,7918),
('0D301-05422-079','2017-09-17',29694,9898),
('0D203-22882-079','2017-11-01',2263,754),
('0D203-22882-079','2017-10-21',15693,5231),
('0D203-22882-079','2017-10-20',15968,5323),
('0D203-22882-079','2017-10-25',10521,3507),
('0D301-05422-079','2017-10-21',23755,7918),
('0D301-05422-079','2017-10-29',17816,5939),
('0D301-05422-079','2017-11-01',15612,5204),
('0D301-05422-079','2017-10-03',20816,6939),
('0D301-05422-079','2017-10-11',15612,5204),
('0D301-05422-079','2017-10-18',26020,8673)
这是预期的输出:
ItemCode 201708-Plan 201708-Actual 201709-Plan 201709-Actual 201710-Plan 201710-Actual 201711-Plan 201711-Actual
--------------- ----------- ------------- ----------- ------------- ----------- ------------- ----------- -------------
0D203-22882-079 54,674 18,225 25,822 8,607 49,875 16,625 2,263 754
0D301-05422-079 97,103 32,367 136,959 45,652 104,020 34,673 15,612 5,204
我必须根据发布日期使用年份和月份与实际和数量连接来调整 PlanQty 和 ActualQty。
我创建了一个数据透视脚本,但出现错误:
DECLARE @PivotColumns AS NVARCHAR(MAX)
SELECT @PivotColumns = COALESCE(@PivotColumns + ',','') + QUOTENAME([YRMOPLAN]) + QUOTENAME([YRMOACT])
FROM (SELECT DISTINCT CONVERT(char(6), cast([ReleasedDate] as date), 112) + 'Plan' as [YRMOPLAN]
,CONVERT(char(6), cast([ReleasedDate] as date), 112) + 'Actual' as [YRMOACT] FROM [dbo].[ProdOrders]) as PivotQuery ORDER BY [YRMOPLAN]
SELECT @PivotColumns
DECLARE @query NVARCHAR(MAX)
SET @query = 'SELECT * FROM
(
SELECT ItemCode, CONVERT(char(6), cast([ReleasedDate] as date), 112) + ''Plan'' as [YRMOPLAN]
,CONVERT(char(6), cast([ReleasedDate] as date), 112) + ''Actual'' as [YRMOACT], PlanQty,ActualQty
FROM ProdOrders
) x
PIVOT
(
SUM(PlanQty)
FOR [YRMOPLAN] IN (' + @PivotColumns + ')
) p
PIVOT
(
SUM(ActualQty)
FOR [YRMOACT] IN (' + @PivotColumns + ')
) p2;'
EXEC SP_EXECUTESQL @query
这是我得到的错误:
消息 102,第 15 级,状态 1,第 10 行
'201708Actual' 附近的语法不正确
【问题讨论】: