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

在excel中有透视表的功能,在数据库中,也是有近似的语法的。好比,在供给商供货的订单表中,存储的是行记实,怎么才能按照供给商,按照年份汇总订单数目,而且实现行转列呢?这个时辰就需要利用PIVOT函数了

东西/原料

  • sqlserver

方式/步调

  1. 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. 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. 3

    查询姑且表中的测试数据

    select * from #tblVendor;

  4. 4

    起首筛选“供给商1”的供货数据,可以直接利用where前提过滤即可

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

  5. 5

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

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

  6. 6

    按照供给商汇总订单数目,就需要利用group by语句

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

  7. 7

    若是想要将行记实的供给商订单数目,转换为列数据,这个时辰就需要利用透视表PIVOT语法了

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

    from #tblVendor v

    pivot(

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

    )

    as result

  • 发表于 2019-05-28 22:02
  • 阅读 ( 869 )
  • 分类:其他类型

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
admin
admin

0 篇文章

作家榜 »

  1. xiaonan123 189 文章
  2. 汤依妹儿 97 文章
  3. luogf229 46 文章
  4. jy02406749 45 文章
  5. 小凡 34 文章
  6. Daisy萌 32 文章
  7. 我的QQ3117863681 24 文章
  8. 华志健 23 文章

联系我们:uytrv@hotmail.com 问答工具