如何使用sqlserver统计全天各个时间段产品销量情况

本篇文章为大家展示了如何使用sqlserver统计全天各个时间段产品销量情况,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

创新互联建站服务项目包括东乌珠穆沁网站建设、东乌珠穆沁网站制作、东乌珠穆沁网页制作以及东乌珠穆沁网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,东乌珠穆沁网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到东乌珠穆沁省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!

成都创新互联公司主营巴宜网站建设的网络公司,主营网站建设方案,app软件开发,巴宜h5重庆小程序开发搭建,巴宜网站营销推广欢迎巴宜等地区企业咨询

公司主营业务:网站制作、成都网站制作、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联推出松原免费做网站回馈大家。

成都创新互联公司主要从事成都网站制作、成都网站设计、网页设计、企业做网站、公司建网站等业务。立足成都服务南川,十余年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:13518219792

成都一家集口碑和实力的网站建设服务商,拥有专业的企业建站团队和靠谱的建站技术,10余年企业及个人网站建设经验 ,为成都上千家客户提供网页设计制作,网站开发,企业网站制作建设等服务,包括成都营销型网站建设,品牌网站制作,同时也为不同行业的客户提供成都网站制作、成都网站建设的服务,包括成都电商型网站制作建设,装修行业网站制作建设,传统机械行业网站建设,传统农业行业网站制作建设。在成都做网站,选网站制作建设服务商就选创新互联。

创新互联主营西湖网站建设的网络公司,主营网站建设方案,APP应用开发,西湖h5成都微信小程序搭建,西湖网站营销推广欢迎西湖等地区企业咨询

现有一个产品销售实时表,表数据如下:

字段name是产品名称,字段type是销售类型,1表示售出,2表示退货,字段num是数量,字段ctime是操作时间。

要求:

在一行中统计24小时内所有货物的销售(售出,退货)数据,把日期考虑在内。

分析:

这实际上是行转列的一个应用,在进行行转列之前,需要补全24小时的所有数据。补全数据可以通过系统的数字辅助表

spt_values来实现,进行行转列时,根据type和处理后的ctime分组即可。

1.建表,导入数据

CREATE TABLE snake (name VARCHAR(10 ),type INT,num INT, ctime DATETIME )INSERT INTO snake VALUES(' 方便面', 1,10 ,'2015-08-10 16:20:05')INSERT INTO snake VALUES(' 香烟A ', 2,2 ,'2015-08-10 18:21:10')INSERT INTO snake VALUES(' 香烟A ', 1,5 ,'2015-08-10 20:21:10')INSERT INTO snake VALUES(' 香烟B', 1,6 ,'2015-08-10 20:21:10')INSERT INTO snake VALUES(' 香烟B', 2,9 ,'2015-08-10 20:21:10')INSERT INTO snake VALUES(' 香烟C', 2,9 ,'2015-08-10 20:21:10')

2.补全24小时的数据

/*枚举0-23自然数列*/WITH  x0     AS ( SELECT  number AS h        FROM   master..spt_values        WHERE  type = 'P'            AND number >= 0            AND number <= 23       ),/*找出表所有的日期*/    x1     AS ( SELECT DISTINCT            CONVERT(VARCHAR(100), ctime, 23) AS d        FROM   snake       ),/*补全所有日期的24小时*/    x2     AS ( SELECT  x1.d ,            x0.h        FROM   x1            CROSS JOIN x0       ),    x3     AS ( SELECT  name ,            type ,            num ,            DATEPART(hour, ctime) AS h        FROM   snake       ),/*整理行转列需要用到的数据*/    x4     AS ( SELECT  x2.d ,            x2.h ,            x3.name ,            x3.type ,            x3.num        FROM   x2            LEFT JOIN x3 ON x3.h = x2.h       )

3.行转列

SELECT ISNULL([0], 0) AS [00] ,      ISNULL([1], 0) AS [01] ,      ISNULL([2], 0) AS [02] ,      ISNULL([3], 0) AS [03] ,      ISNULL([4], 0) AS [04] ,      ISNULL([5], 0) AS [05] ,      ISNULL([6], 0) AS [06] ,      ISNULL([3], 7) AS [07] ,      ISNULL([8], 0) AS [08] ,      ISNULL([9], 0) AS [09] ,      ISNULL([10], 0) AS [10] ,      ISNULL([3], 11) AS [11] ,      ISNULL([12], 0) AS [12] ,      ISNULL([13], 0) AS [13] ,      ISNULL([14], 0) AS [14] ,      ISNULL([3], 15) AS [15] ,      ISNULL([16], 0) AS [16] ,      ISNULL([17], 0) AS [17] ,      ISNULL([18], 0) AS [18] ,      ISNULL([19], 15) AS [19] ,      ISNULL([20], 0) AS [20] ,      ISNULL([21], 0) AS [21] ,      ISNULL([22], 0) AS [22] ,      ISNULL([23], 15) AS [23] ,      type ,      d AS date  FROM  ( SELECT  d ,            h ,            type ,            num       FROM   x4      ) t PIVOT( SUM(num) FOR h IN ( [0], [1], [2], [3], [4], [5], [6],                      [7], [8], [9], [10], [11], [12],                      [13], [14], [15], [16], [17], [18],                      [19], [20], [21], [22], [23] ) ) t  WHERE  type IS NOT NULL

来看一下最终效果,只有1天的数据,可能看起来不是很直观。

本文的技术点有2个:

1.利用数字辅助表补全缺失的记录

2.pivot行转列函数的使用

上述内容就是如何使用sqlserver统计全天各个时间段产品销量情况,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注创新互联行业资讯频道。


当前名称:如何使用sqlserver统计全天各个时间段产品销量情况
文章来源:http://myzitong.com/article/igchdo.html