我有一张表格,其中包含以下数据
我遇到的问题是我需要每个月的运行总计,我设法创建这是一个非常容易的excel表但是当我在SQL中尝试任何东西时,数据结果会有所不同。
下图显示了按月支付的每笔付款金额的总和,然后是每笔付款金额的总和。我编辑了excel来显示公式和公式的结果。还有我在使用SQL 2008时获得的结果(仅限示例)
***更新 - 我试图实现的结果集在excel文档中是例如月117 +月118给出月118 TotalToDate,然后月118 + 119给出月119总计到目前为止。
不知道怎么解释这个?
(从#tmp005 t2中选择总和(已付款),其中t2。[monthid]< = t5。[monthid])已付款
真的觉得这比我想的要复杂得多!
答案 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
希望你能弄清楚如何将它应用到你的环境/架构中。