我有一个包含一些事务字段的表,主要ID是一个CUSTomer字段和一个TXN_DATE,对于其中两个,NOM_AMOUNT和GRS_AMOUNT我需要一个EndOfMonth SUM(没有滚动,只有EOM,如果没有事务,则可以为0)月份)这两个金额字段。我该怎么做?我还需要一个0报告几个月没有交易.. 谢谢!
答案 0 :(得分:2)
如果您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