zoukankan      html  css  js  c++  java
  • YTD易出现断层问题,请注意!

     1 declare @table table(
     2 company_id int ,--公司编号
     3 quarter_num char(2),--季度
     4 disti varchar(50),--分销商
     5 num int --数量
     6 )
     7 
     8 insert @table
     9 values(1,'Q1','D1',1),(1,'Q1','D1',2)
    10 ,(1,'Q3','D2',1)
    11 ,(1,'Q4','D1',1)
    12 ,(1,'Q2','D1',1)
    13 ,(2,'Q1','D1',1)
    14 ,(2,'Q3','D1',3)
    15 ,(2,'Q4','D1',4)
    16 ,(2,'Q2','D1',2)

    项目中经常遇到类似YTD(Year to Day,年初1-1至某天的统计)的查询。表结构如上图所示。

    而在实际项目中,并不会刚刚好只按照时间这一个参数来分组,比如会增加上图中的disti字段,而此字段最大的特点为,每个公司并不一定都有此分销商的数据

    在查询时出现断层的问题,如下图第4行结果所示。

    select 
    b.company_id,b.quarter_num,b.disti,SUM(a.num) [YTQ]
    from @table a join (select distinct company_id,quarter_num,disti from @table )b 
        on a.company_id=b.company_id and a.disti=b.disti and a.quarter_num<=b.quarter_num
    group by b.company_id,b.quarter_num,b.disti

    正常的需求是公司1,Q3应该有2行数据,D1分销商统计值为4,D2分销商统计值为1;Q4应该增加一条D2统计值为1的记录。

    如果偏好于使用YTD查询,请注意在最开始构造基础数据时,囊括所有字段的所有值。

  • 相关阅读:
    用Canvas绘制一个钟表
    用css3做一个3D立方体
    函数调用的不同方式,以及this的指向
    Javascript 严格模式use strict详解
    前端开发页面的性能优化方案总结
    Promise对象解读
    Vue爬坑之vuex初识
    WEB前端性能优化小结
    navicat 注册码
    docker
  • 原文地址:https://www.cnblogs.com/daisy-popule/p/4340315.html
Copyright © 2011-2022 走看看