当前位置: 首页 > 编程笔记 >

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

宰父学
2023-03-14
本文向大家介绍如何统计全天各个时间段产品销量情况(sqlserver),包括了如何统计全天各个时间段产品销量情况(sqlserver)的使用技巧和注意事项,需要的朋友参考一下

数据库环境:SQL SERVER 2005

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

字段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)的全部内容,希望大家喜欢。

 类似资料:
  • WooCommerce将每个产品的总销量作为wp_postmeta表里,可以用get_post_meta获取,方法如下 在主题的functions.php中加入如下代码 //在shop页面显示总销量 add_action( 'woocommerce_after_shop_loop_item_title', 'wc_product_sold_count', 5 ); //在产品详情页面显示总销量 a

  • 我在桌子设计方面没有太多的经验。我的目标是创建一个或多个满足以下要求的产品表: > 支持多种产品(电视、电话、PC、...)。每种产品都有一组不同的参数,例如: > 手机将有颜色、大小、重量、操作系统... PC将有CPU、HDD、RAM... 参数集必须是动态的。您可以添加或编辑任何您喜欢的参数。 如果每种产品没有单独的表,我怎么能满足这些要求呢?

  • 重新创建此问题的步骤: 创建可变产品 我正在使用Woocommerce v2。6.14和Wordpress v4。7.6. 如果我尝试检查

  • 新手入门 - 产品概况 百度统计介绍 百度统计(tongji.baidu.com)是百度推出的一款稳定、免费、专业、安全的数据统计、分析工具。能够为web系统管理者提供权威、准确、实时的流量质量和访客行为分析,助力日常指标监控,为系统优化、提升投资回报率等目标提供指导。 百度统计目前已为客户提供几十种图形化报告,帮助用户 完成以下工作: 1、监控网站、系统运营状态 百度统计能够全程跟踪网站访客的各

  • 数据安全更新是从宣布的产品生命周期结束之日起两年后执行。请定期更新 Polar 产品,一旦 Polar Flow 移动应用程序或 Polar FlowSync 计算机软件通知您有新的固件版本可用,即可进行更新。 保存在 Polar 设备上的训练数据和其他数据包含有关您的敏感信息,如您的姓名、身体信息、整体健康状况和位置。位置数据可用于在外出训练时跟踪您,并识别您平常的训练路线。出于这些原因,在不使

  • 数据安全更新是从宣布的产品生命周期结束之日起两年后执行。请定期更新 Polar 产品,一旦 Polar Flow 移动应用程序或 Polar FlowSync 计算机软件通知您有新的固件版本可用,即可进行更新。 保存在 Polar 设备上的训练数据和其他数据包含有关您的敏感信息,如您的姓名、身体信息、整体健康状况和位置。位置数据可用于在外出训练时跟踪您,并识别您平常的训练路线。出于这些原因,在不使