在excel中有透视表的功能,在数据库中,也是有近似的语法的。好比,在供给商供货的订单表中,存储的是行记实,怎么才能按照供给商,按照年份汇总订单数目,而且实现行转列呢?这个时辰就需要利用PIVOT函数了
建立一个姑且表,用于演示sqlserver数据库中,若何利用透视表PIVOT,实现行数据转当作列数据
IF OBJECT_ID('tempdb..#tblVendor') IS NOT NULL DROP TABLE #tblVendor;
CREATE TABLE #tblVendor(
VendorName varchar(50), -- 供给商名称
OrderNum int, -- 订单数目
OrderYear int -- 订单年份
);
往姑且表中插入几行测试数据,模拟供给商供货的订单表
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);
查询姑且表中的测试数据
select * from #tblVendor;
起首筛选“供给商1”的供货数据,可以直接利用where前提过滤即可
select * from #tblVendor where VendorName = '供给商1';
筛选“供给商1”的供货数据,按照年份排序,可以利用order by语句即可
select * from #tblVendor where VendorName = '供给商1' order by OrderYear;
按照供给商汇总订单数目,就需要利用group by语句
select VendorName, OrderNumTotal = sum(OrderNum) from #tblVendor group by VendorName;
若是想要将行记实的供给商订单数目,转换为列数据,这个时辰就需要利用透视表PIVOT语法了
select VendorName,[2017], [2018], [2019]
from #tblVendor v
pivot(
sum(v.OrderNum) for v.OrderYear in([2017], [2018], [2019])
)
as result
0 篇文章
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!