0

嗨,我正在编写以下查询,结果不是我需要的

第 1 节

     选择

          case_PrimaryCompanyId 为 companyid,
          转换(VARCHAR(7),ca.case_createddate,111)作为日期,
          'Moving Balance' 作为 InvoiceType,
          总和(mb.Amount)作为金额
来自 ca 的案例

第 2 节

左连接 (
选择
    case_PrimaryCompanyId 为 companyid,
    案例创建日期,
    case_TotalExVat 作为金额
来自案例)mb

约 case_primaryCompanyId = mb.companyid  
     和 ca.case_createdDate >= mb.case_CreatedDate

在哪里
    ca.case_primaryCompanyId = companyid

通过...分组
     case_primaryCompanyId,
     转换(VARCHAR(7),ca.case_createddate,111)

好的,以上将获得如下数据列表,并按月和年对其进行分组,并汇总自开始以来的数量。

日期 实际金额                
2009 年 10 月 20 日 1766.52
2009 年 7 月 11 日 2778.02
14/01/2010 -2700.00
28/02/2010 -78.02

27/05/2010 2489.40
2010 年 5 月 27 日 2491.20
2010 年 5 月 30 日 2494.80

一切正常,计算每个月的累积值。

直到我到了 2010 年 5 月,然后为可能的每条记录计算移动余额,而不是可能的一次(而不是仅在组值更改时计算一次)

动平衡结果

日期显示应该是
2009/10 1766.52 1766.52
2009/11 2788.02 2788.02
2010/01 78.02 78.02
2010/02 0.00 0.00

2010/05 22426.20 7475.50

尝试过 sum(distinct mb.Amount) 但这不起作用

任何想法都会非常感激谢谢瑞秋

4

2 回答 2

0

如果将产生结果集的查询放入with子句

;with results as 
(
     select 
          convert(varchar(4),YEAR(date)) + right('00'+convert(varchar(2),MONTH(date)),2) m, 
          sum(amount) a 
     from 
          (-- your results here ) data 
     group by YEAR(date), MONTH(date)
)
select 
     *,
     (select SUM(a) from results r1 where r1.m<=results.m)
from results
order by m
于 2013-08-09T09:58:26.463 回答
0

在经历了很多挫折和几周的头发拉扯之后,

我终于解决了这个问题,

我取出了加入,只使用了一个选择语句


(
选择
       case_PrimaryCompanyId 为 companyid,
       转换(VARCHAR(7),case_createddate,111)作为日期,
       case_invoicetype 作为 InvoiceType,
       Sum(case_totalexvat) 作为金额
来自案例 AS ca
在哪里  
datediff(m,case_createddate,getDate()) = CONVERT(VARCHAR(7),b.case_createddate, 111) 和 b.case_primarycompanyid = a.case_primarycompanyid
)PrevSum
从案例一
在哪里

  转换(VARCHAR(7),a.case_createddate,111)>转换(VARCHAR(7),DATEADD(m,-13,current_timestamp),111)
按 a.case_primarycompanyid 分组,CONVERT(VARCHAR(7),a.case_createddate, 111)

)
按日期、发票类型排序

于 2013-08-15T13:49:09.420 回答