按月分组的运行计数以汇总销售额

时间:2017-09-11 12:37:52

标签: sql oracle

我的销售表包含字段Datatime(DateTime)和sales(Number)。 如何编写SQL查询以使用新列“运行计数”获取过去6个月按月分组的数据。

运行计数是一个正整数,以1开始(如果销售额为0),如果下个月有销售,则为2(假设销售和运行计数在上个月为1),依此类推。如果一个月没有销售,则该月的销售数量将为0,如果下个月有销售,则重新开始为1,依此类推。

例:
本月份是' 2017年' 3月,4月,6月,7月,8月有销售,但5月没有销售(没有行)。 所以输出将是:

| Month_Year | Sum(Sales) | Running_Count |
| 03/2017    | 1000       | 1             |
| 04/2017    | 1500       | 2             |
| 05/2017    | 0          | 0             |
| 06/2017    | 300        | 1             |
| 07/2017    | 550        | 2             |
| 08/2017    | 1900       | 3             |

欢迎建议编辑此问题。

1 个答案:

答案 0 :(得分:1)

这很难看......但它确实有效:

WITH
    aset
    AS
        (SELECT month_year
              , sales
              , CASE WHEN COALESCE (LAG (sales) OVER (ORDER BY month_year), 0) = 0 THEN 1 ELSE 0 END COUNT
           FROM deleteme_table),
    bset
    AS
        (SELECT month_year, sales, SUM (COUNT) OVER (ORDER BY month_year) count_group
           FROM aset)
SELECT month_year
     , sales
     , CASE
           WHEN sales = 0
           THEN
               0
           ELSE
               ROW_NUMBER ()
                   OVER (
                       PARTITION BY count_group ORDER BY month_year
                   )
       END
           running_count
  FROM bset;

SALES  MONTH_YEAR RUNNING_COUNT                          
1000   2017/03/01     1                                      
1500   2017/04/01     2                                      
0      2017/05/01     0                                      
300    2017/06/01     1                                      
550    2017/07/01     2                                      
1900   2017/08/01     3