数据库SQL如何使用透视表PIVOT,实现数据行转列
1、创建一个临时表,用于演示sqlserver数据库中,如何使用透视表PIVOT,实现行数据转成列数据
IF OBJECT_ID('tempdb..#tblVendor') IS NOT NULL DROP TABLE #tblVendor;
CREATE TABLE #tblVendor(
VendorName varchar(50), -- 供应商名称
OrderNum int, -- 订单数量
OrderYear int -- 订单年份
);

2、往临时表中插入几行测试数据,模拟供应商供货的订单表
insert into #tblVendor(VendorName, OrderNum, OrderYear) values('供应商1', 1000, 2018);
insert into #tblVendor(VendorName, OrderNum, OrderYear) values('供应商1', 2000, 2017);
insert into #tblVendor(VendorName, OrderNum, OrderYear) values('供应商1', 3000, 2019);
insert into #tblVendor(VendorName, OrderNum, OrderYear) values('供应商2', 4000, 2019);

3、查询临时表中的测试数据
select * from #tblVendor;

4、首先筛选“供应商1”的供货数据,可以直接使用where条件过滤即可
select * from #tblVendor where VendorName = '供应商1';

5、筛选“供应商1”的供货数据,按照年份排序,可以使用order by语句即可
select * from #tblVendor where VendorName = '供应商1' order by OrderYear;

6、按照供应商汇总订单数量,就需要使用group by语句
select VendorName, OrderNumTotal = sum(OrderNum) from #tblVendor group by VendorName;

7、如果想要将行记录的供应商订单数量,转换为列数据,这个时候就需要使用透视表PIVOT语法了
select VendorName,[2017], [2018], [2019]
from #tblVendor v
pivot(
sum(v.OrderNum) for v.OrderYear in([2017], [2018], [2019])
)
as result
