【问题标题】:Calculating the sum of annual amounts when frequencies of payments differ支付频率不同时计算年度金额的总和
【发布时间】:2014-07-31 15:38:02
【问题描述】:

我目前正在尝试编写一个 select 语句,该语句在单个列中计算年度总和。

我面临的问题是有几种不同的付款频率,例如我必须将每月金额乘以 12 才能得到年度、季度乘以 4、半年度乘以 2 等等。

我在下面写了一个声明来执行此操作,但是它要求我按频率和数量字段进行分组,这会产生不希望的结果。

select (case when Frequency='month' then SUM(cast(Amount as decimal(10,2))*12) 
else (case when Frequency='quarter' then SUM(cast(Amount as decimal(10,2))*4) 
else (case when Frequency='year' then SUM(cast(Amount as decimal(10,2))*1) 
else (case when Frequency='six months' then SUM(cast(Amount as decimal(10,2))*2) end) 
end)
end) end) as 'Total Annual Amount' 
from Table group by Frequency

我知道就解决这个问题而言,我可能会找错树,但以上是我得到的最接近的结果。

希望我的描述已经足够详细,如果您需要我进一步详细说明,请告诉我

【问题讨论】:

  • 你能展示一些示例数据和预期结果吗?

标签: sql


【解决方案1】:

尝试将您的总和移出您的案例:

select
sum (case when Frequency='Month' then (cast(amount as decimal(10,2))*12
     when Frequency='quarter' then...
end) as [Total Annual Amount]

【讨论】:

  • 非常感谢,我不敢相信我没有尝试过这种变化。
【解决方案2】:

您也可以使用 WITH AS(假设为 ORACLE)...

WITH dmap AS
 ( select 'Month' as duration, 12 as mult from dual
   UNION
   select 'Year' as duration, 1 as mult from dual
   UNION
   select 'Quater' as duration, 4 as mult from dual
   UNION
   select 'six months' as duration, 2 as mult from dual
 ) 
select sum(cast(Amount as decimal(10,2)) * mult)
from tab, dmap
where duration = frequency;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 2020-11-28
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多