在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 篇文章
如果覺得我的文章對您有用,請隨意打賞。你的支持將鼓勵我繼續創作!