PIVOT函数中必须要包含一个聚合函数,聚合函数分别是:COUNT、SUM、MAX、MIN、AVG,针对不同的使用场景,该选择哪个聚合函数,意义都是不一样的,下面还是举例说明吧!
我建了如下一张销售表并且插入一下测试值:
CREATE TABLE SalesOrder
(
门店 VARCHAR(50),
商品类型 VARCHAR(50),
销售额 INT
)
INSERT INTO SalesOrder
SELECT 'ShopA','A',round(100+100*rand(),0) UNION ALL
SELECT 'ShopA','A',round(100+100*rand(),0) UNION ALL
SELECT 'ShopA','B',round(200+100*rand(),0) UNION ALL
SELECT 'ShopA','B',round(200+100*rand(),0) UNION ALL
SELECT 'ShopA','B',round(200+100*rand(),0) UNION ALL
SELECT 'ShopA','C',round(1000+100*rand(),0)UNION ALL
SELECT 'ShopB','A',round(100+100*rand(),0) UNION ALL
SELECT 'ShopB','A',round(100+100*rand(),0) UNION ALL
SELECT 'ShopB','B',round(200+100*rand(),0) UNION ALL
SELECT 'ShopB','C',round(1000+100*rand(),0)UNION ALL
SELECT 'ShopB','C',round(1000+100*rand(),0)UNION ALL
SELECT 'ShopC','A',round(100+100*rand(),0) UNION ALL
SELECT 'ShopC','B',round(200+100*rand(),0) UNION ALL
SELECT 'ShopC','B',round(200+100*rand(),0) UNION ALL
SELECT 'ShopC','B',round(200+100*rand(),0) UNION ALL
SELECT 'ShopC','B',round(200+100*rand(),0) UNION ALL
SELECT 'ShopC','C',round(1000+100*rand(),0)UNION ALL
SELECT 'ShopC','C',round(1000+100*rand(),0)
下面我要在PIVOT行转列函数中,使用不同的聚合函数,更直观的统计各个“门店”以及各个”商品类型“的销售情况:
1.SUM:
SELECT * FROM SalesOrder
PIVOT(SUM(销售额) FOR 商品类型 IN(A,B,C)) AS PVT
统计的是各个门店,各个商品类型的总的销售额。
2.COUNT:
SELECT * FROM SalesOrder
PIVOT(COUNT(销售额) FOR 商品类型 IN(A,B,C)) AS PVT
统计的是各个门店,各个商品类型的销售量。
3.MAX:
SELECT * FROM SalesOrder
PIVOT(MAX(销售额) FOR 商品类型 IN(A,B,C)) AS PVT
统计的是各个门店,各个商品类型卖得最贵的销售额。
4.MIN:
SELECT * FROM SalesOrder
PIVOT(MIN(销售额) FOR 商品类型 IN(A,B,C)) AS PVT
和MAX相反,统计的是最便宜的销售额
5.AVG
SELECT * FROM SalesOrder
PIVOT(AVG(销售额) FOR 商品类型 IN(A,B,C)) AS PVT
统计的是各个门店,各个商品类型的销售额的平均值