数据库SQL如何使用透视表PIVOT,实现数据行转列

2025-10-26 22:40:02

1、创建一个临时表,用于演示sqlserver数据库中,如何使用透视表PIVOT,实现行数据转成列数据

IF OBJECT_ID('tempdb..#tblVendor') IS NOT NULL DROP TABLE #tblVendor; 

CREATE TABLE #tblVendor(

    VendorName varchar(50),     -- 供应商名称

    OrderNum int,                       -- 订单数量

    OrderYear int                         -- 订单年份   

);

数据库SQL如何使用透视表PIVOT,实现数据行转列

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);

数据库SQL如何使用透视表PIVOT,实现数据行转列

3、查询临时表中的测试数据

select * from #tblVendor;

数据库SQL如何使用透视表PIVOT,实现数据行转列

4、首先筛选“供应商1”的供货数据,可以直接使用where条件过滤即可

select * from #tblVendor where VendorName = '供应商1';

数据库SQL如何使用透视表PIVOT,实现数据行转列

5、筛选“供应商1”的供货数据,按照年份排序,可以使用order by语句即可

select * from #tblVendor where VendorName = '供应商1' order by OrderYear;

数据库SQL如何使用透视表PIVOT,实现数据行转列

6、按照供应商汇总订单数量,就需要使用group by语句

select VendorName, OrderNumTotal = sum(OrderNum) from #tblVendor group by VendorName;

数据库SQL如何使用透视表PIVOT,实现数据行转列

7、如果想要将行记录的供应商订单数量,转换为列数据,这个时候就需要使用透视表PIVOT语法了

select VendorName,[2017], [2018], [2019]

from #tblVendor v

pivot(

     sum(v.OrderNum) for v.OrderYear in([2017], [2018], [2019])

)

as result

数据库SQL如何使用透视表PIVOT,实现数据行转列

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢