汇总数据以获得每月运行的总月份

时间:2013-11-26 10:45:10

标签: sql-server-2008 tsql

我有一张表格,其中包含以下数据

just a snippet of the data in the table

我遇到的问题是我需要每个月的运行总计,我设法创建这是一个非常容易的excel表但是当我在SQL中尝试任何东西时,数据结果会有所不同。

下图显示了按月支付的每笔付款金额的总和,然后是每笔付款金额的总和。我编辑了excel来显示公式和公式的结果。还有我在使用SQL 2008时获得的结果(仅限示例)

***更新 - 我试图实现的结果集在excel文档中是例如月117 +月118给出月118 TotalToDate,然后月118 + 119给出月119总计到目前为止。

不知道怎么解释这个?

  

(从#tmp005 t2中选择总和(已付款),其中t2。[monthid]< =   t5。[monthid])已付款

enter image description here

真的觉得这比我想的要复杂得多!

3 个答案:

答案 0 :(得分:0)

我猜您将月份存储在一个单独的表中,并使用M_ID来引用它。所以,要获得每个月的总和,请执行以下操作:

SELECT [M_ID]
       ,sum([Paid]) 
FROM #tmp005
GROUP BY [M_ID]

答案 1 :(得分:0)

根据我的理解,你正试图逐月运行,下面的CTE应该做你想要的。

--create table #temp (M_ID Int, Paid Float)

--Insert Into #temp VALUES (116, '50.00'), (117, '50.00'),(117, '5.00'),(117, '20.00'),(117, '10.00'),(117, '75.40'),(118, '125.00'),(118, '200.00'),(118, '5.00')

;WITH y AS 
(
  SELECT M_ID, paid, rn = ROW_NUMBER() OVER (ORDER BY M_ID)
    FROM #temp
), x AS
(
    SELECT M_ID, rn, paid, rt = paid
      FROM y
      WHERE rn = 1
    UNION ALL
    SELECT y.M_ID, y.rn, y.paid, x.rt + y.paid
      FROM x INNER JOIN y
      ON y.rn = x.rn + 1
)
SELECT M_ID, MAX(rt) as RunningTotal 
    FROM x
    Group By M_ID  
    OPTION (MAXRECURSION 10000);

它基于样本数据的前3个M_ID,只需将#temp更改为您的特定表,我不知道表中是否有另一个唯一标识符,这就是我必须使用{ {1}}但是这应该根据M_ID字段正确排序。

答案 2 :(得分:0)

我想我会使用相关的子查询: -

select r.m_id,
(
    select sum(csq.paid)
    from #tmp005 csq
    where csq.m_id<=r.m_id
)
from (
    select distinct m_id
    from #tmp005
) r

希望你能弄清楚如何将它应用到你的环境/架构中。