SQL Server 2012-使用积压和结转运行总计

SQL Server 2012-使用积压和结转运行总计,sql,sql-server,sql-server-2012,window-functions,Sql,Sql Server,Sql Server 2012,Window Functions,下午好 祝大家身体健康,新年快乐 我在写的一个查询中遇到了一些奇怪的行为,即滞后函数不一致 基本上,我有一个由2个CTE组成的数据集,每个CTE包含MMM-YYYY格式的月份,然后一个包含打开的票证计数,另一个包含相同的票证计数,但用于关闭的票证 然后我要做的是添加一个“Backlog”列,在所有情况下第一个月都是0,并添加一个“结转”列。结转金额将为当月创建+积压的余额,并将反映为下个月的积压 在我意识到负的积压有点伪造数字之前,我一直在很好地进行着。我的意思是,例如: 创建了10张罚单 12

下午好

祝大家身体健康,新年快乐

我在写的一个查询中遇到了一些奇怪的行为,即滞后函数不一致

基本上,我有一个由2个CTE组成的数据集,每个CTE包含MMM-YYYY格式的月份,然后一个包含打开的票证计数,另一个包含相同的票证计数,但用于关闭的票证

然后我要做的是添加一个“Backlog”列,在所有情况下第一个月都是0,并添加一个“结转”列。结转金额将为当月创建+积压的余额,并将反映为下个月的积压

在我意识到负的积压有点伪造数字之前,我一直在很好地进行着。我的意思是,例如:

创建了10张罚单 12张票已解决 0票积压 -2张票结转 在这种情况下,为了我们的报告目的,我不得不将任何负积压工作归零

这似乎就是问题的症结所在。在最初的几个月里,一切都会很好——数值是正确的,将正确的数字向前推进,并相应地将其分解到计算中。但随后它将携带一些看似不确定的来源,当然,这对超过这一点的准确性有连锁反应

SQL Server 2012引入了窗口函数,这应该是非常基本的,但显然不是

虽然我很高兴发布代码,但我已经尝试了很多剥皮的方法,我觉得如果有人能够对如何编写它给出一个高层次的概述,我会立即看到哪里出了问题。在这样做的过程中,我会做出相应的回应,尝试完整性

提前非常感谢

结果错误图片:


根据对问题的评论。顺便说一句,创建的月份列应该以某种方式重做,以便将年份放在月份之前,如2015-01。这将确保默认排序算法的正确排序

如果日期必须在最终报告中显示为2015年1月,则在查询的最后一步中进行表示

WITH ticket_account AS
(
    SELECT
         c.[Created Month]  AS Month
        ,c.Tickets          AS Created
        ,r.Tickets          AS Resolved

    FROM
      Created AS c

    INNER JOIN 
        Resolved AS r 
        ON c.[Created Month] = r.[Resolved Month]
)

SELECT
    *
    ,(SUM(Created) OVER (ORDER BY Month ASC) - SUM(Resolved) OVER (ORDER BY Month ASC)) AS Balance

FROM
    ticket_account

为什么告诉我你什么时候可以给Codez看请给出一些代码示例。并且,您可以使用前面的SUMQUOTITY OVERPARTITION by ProductId order by MovementDate rows UNBONDED作为运行sum的sumIn语法。请检查样本检查这可能会有帮助如果你保持流动平衡,你还需要包括结转金额。我看不出你如何创建10并解析12,除非暗示2是从上一个报告期结转的,在这种情况下,结转将是0而不是-2。@HendrixAndChill,我看不出你的数字纯粹在算术上有什么意义。在2015年8月,创建了50个,解决了52个,但只有1个积压和0个结转!这不平衡——或者这是问题的一种表现?我添加了一个答案,解释了平衡通常是如何推导出来的。这个答案是正确的-我的问题是由于一些错误的数据被错误的连接类型打折了。请参阅问题注释。
WITH ticket_account AS
(
    SELECT
         c.[Created Month]  AS Month
        ,c.Tickets          AS Created
        ,r.Tickets          AS Resolved

    FROM
      Created AS c

    INNER JOIN 
        Resolved AS r 
        ON c.[Created Month] = r.[Resolved Month]
)

SELECT
    *
    ,(SUM(Created) OVER (ORDER BY Month ASC) - SUM(Resolved) OVER (ORDER BY Month ASC)) AS Balance

FROM
    ticket_account