下面是我创建并在其中插入值的表格:
CREATE TABLE prod_sales
(saleID int identity(1,1),
saleDate date,
department varchar(125),
amount int )
GO
INSERT INTO prod_sales VALUES
('2016-01-01','Men''s Clothing & Accessories' ,ROUND(RAND() * 1000, 0)),
('2016-01-02','Phones & Telecommunications',ROUND(RAND() * 1000, 0)),
('2016-01-01','Computer & Office',ROUND(RAND() * 1000, 0)),
('2016-01-02','Consumer Electronics',ROUND(RAND() * 1000, 0)),
('2016-01-01','Men''s Clothing & Accessories' ,ROUND(RAND() * 1000, 0)),
('2016-01-02','Phones & Telecommunications',ROUND(RAND() * 1000, 0)),
('2016-01-01','Computer & Office',ROUND(RAND() * 1000, 0)),
('2016-01-01','Consumer Electronics',ROUND(RAND() * 1000, 0)),
('2016-01-01','Men''s Clothing Accessories' ,ROUND(RAND() * 1000, 0)),
('2016-01-02','Phones & Telecommunications',ROUND(RAND() * 1000, 0)),
('2016-01-02','Computer & Office',ROUND(RAND() * 1000, 0)),
('2016-01-01','Consumer Electronics',ROUND(RAND() * 1000, 0))
GO
SELECT * FROM prod_sales
我的目标是显示每个部门每天的销售额总和
动态枢轴
查询结果应该如下面的屏幕截图所示:
为了实现我的目标,我为Dynamic PIVOT创建了一个存储过程,如下所示:
CREATE OR ALTER PROCEDURE DynamicPivot
@ColumnToPivot VARCHAR(50),
@ListToPivot VARCHAR(50)
AS
BEGIN
DECLARE @SqlStatement VARCHAR(MAX)
SET @SqlStatement =
'SELECT saleDate,[Computer & Office],[Consumer Electronics],[Men''s Clothing & Accessories],[Phones & Telecommunications]
FROM
(
SELECT saleDate,department,amount
FROM prod_sales
) AS DataSource
PIVOT
(
SUM(amount)
FOR ['+@ColumnToPivot+'] IN ('+@ListToPivot+')
) AS Pivoting'
EXECUTE (@SqlStatement)
END
EXECUTE DynamicPivot 'department','[Computer & Office],[Consumer Electronics],[Men''s Clothing & Accessories],[Phones & Telecommunications]'
存储过程已成功创建,但在执行存储过程后,它会显示一条错误消息,如下所示:
如何解决这个问题?