如果我有以下格式的数据;
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% 为(收入 - 成本)/每个期间的收入。
我可以看到实现此目的的各种方法,但所有方法都非常丑陋,我想知道是否有用于此类多行计算的优雅的通用方法。
谢谢
编辑
其中一些计算可能会变得非常复杂,例如
自由现金流 = 利润 - 运营支出 - 资本支出 + 营运资金变化 + 支付的利息
所以我希望有一种不需要大量连接到自身的通用方法。
谢谢
最佳答案
好的,然后将 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
关于sql - SQL Server 多行计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16652858/