我有一个表的一些事务字段,主ID是一个CUSTomer字段和一个TXN_DATE和两个,NOM_AMOUNT和GRS_AMOUNT我需要一个EndOfMonth SUM(不滚动,只是EOM,可以如果这个月没有交易,则为0)。我该怎么做?我还需要0个月没有交易报告。 谢谢!T-SQL月的总和
回答
如果你group by表达式month(txn_date)你可以计算出sum。如果您在月份使用带有连接的临时表,则可以确定哪些月份没有记录,因此报告0(如果不使用coalesce函数,则报告为null)。
这将是您的最终结果,我假设您可以添加您需要总结和适应您的模式的其他列。
select mnt as month
, sum(coalesce(NOM_AMOUNT ,0)) as NOM_AMOUNT_EOM
, sum(coalesce(GRS_AMOUNT ,0)) as GRS_AMOUNT_EOM
from (
select 1 as mnt
union all select 2
union all select 3
union all select 4
union all select 5
union all select 6
union all select 7
union all select 8
union all select 9
union all select 10
union all select 11
union all select 12) as m
left outer join Table1 as t
on m.mnt = month(txn_date)
group by mnt
这里是最初的工作sqlfiddle
有点迂腐,我知道,但“union all”的成本要低得多,但会大大简化执行计划(使OP的分析和优化更容易)。我是唯一一个认为'union'应该默认为'all'并强制用户指定'distinct'的用户是否希望排序/重复数据删除? – dav1dsm1th
@ dav1dsm1th一点也不迂腐。执行计划现在确实好多了。 TNX。 – rene
这的确令人印象深刻,几乎是我所追求的。请问,如何在输出中包含[id]和两个数量?我的意思是,我设计了桌子,我的主键是3个字段,如[id1] [id2]和[txn_date],我有2个字段,如amt1和amt2。我可以调整上面的逻辑来适应这个吗? – Nick
- 1. TSQL 2008与前几个月和年的运行总数
- 2. TSQL运行总和
- 3. TSQL计算总和
- 4. 的QlikView - 总和月
- 5. 月饼的总和
- 6. 当月和上一年度的总和当月和当月的相应月份的总和
- 7. TSQL计算月份的月份数
- 8. TSQL - 运行总
- 9. Excel的总和天月
- 10. TSQL - 带条件的时间总和列
- 11. TSQL按月组排列月度报告
- 12. TSQL计算基于月
- 13. TSQL枢轴汇总
- 14. 每周总时间和月总时数
- 15. TSQL正在运行的总计来自前面的总和
- 16. 总和一个月SQL
- 17. 月明智总和列mysql
- 18. 总和月度数组值
- 19. 选择月份和月份中的所有日期的总和
- 20. 每天,每周和每月的总和
- 21. 尽管在TSQL总和循环
- 22. 年的每个月的值的总和
- 23. 相同月份的值的总和
- 24. Postgres中的同一月的总和值
- 25. TSQL:或上个月的状态
- 26. 如何连接表和每月总和
- 27. 核心数据组按月和总和
- 28. LINQ的总和由月或数周
- 29. 最近一个月的总和值
- 30. 如何获得每月的总和?
你已经尝试过通过总和组和选择?你是否在网上查阅月份和年份功能? – rene
我做过了,计算这个时有困难,现在我正在研究制作所有月份第一天的清单,然后减去一个,并找到上个月的最后一天,但无法使其工作的技巧。 – Nick
如果你可以将这种努力添加到你的问题,将阻止你的问题早日结束 – rene