sql - SQL Server 多行计算

标签 sql sql-server t-sql sql-server-2008-r2

如果我有以下格式的数据;

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/

相关文章:

php - 从 2 个表中选择项目的总值并更新另一个表的值(复杂查询)

用于选择未引用行的 SQL 查询

c# - 图像字节数组未正确保存到数据库

sql - SQL Server 是否优化 select 查询中的 DATEADD 计算?

sql - TO_NUMBER 号码无效错误

php - 使用数组与另一个表的关系

sql - 是否可以在 SQL Server 中的 where 或 having 子句中使用自定义字段?

sql-server - FREETEXTTABLE 为什么或如何给出比其他人更高的排名值

sql - T-SQL - 选择 XML 节点值,如果节点不存在则选择 NULL

sql - 生成序列号