如果我有以下格式的数据;
Account | Period | Values
Revenue | 2013-01-01 | 5432
Revenue | 2013-02-01 | 6471
Revenue | 2013-03-01 | 7231
Costs | 2013-01-01 | 4321
Costs | 2013-02-01 | 5672
Costs | 2013-03-01 | 4562
我想得到像这样的结果;
Account | Period | Values
Margin | 2013-01-01 | 1111
Margin | 2013-02-01 | 799
Margin | 2013-03-01 | 2669
M% | 2013-01-01 | .20
M% | 2013-02-01 | .13
M% | 2013-03-01 | .37
其中保证金 = 收入 - 成本,M% 为(收入 - 成本)/每个期间的收入。
我可以看到实现此目的的各种方法,但所有方法都非常丑陋,我想知道是否有用于此类多行计算的优雅的通用方法。
Thanks
Edit
其中一些计算可能会变得非常复杂,例如
自由现金流 = 利润 - 运营支出 - 资本支出 + 营运资金变化 + 支付的利息
所以我希望有一种不需要大量连接的通用方法。
Thanks
好的,然后将 Max 放在 Case 语句中,如下所示:
with RevAndCost as (revenue,costs,period)
as
(
select "Revenue" = Max(Case when account="Revenue" then Values else null end),
"Costs" = MAX(Case when account="Costs" then values else null end),
period
from data
group by period
)
select Margin = revenue-costs,
"M%" = (revenue-costs)/nullif(revenue,0)
from RevAndCost
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)