YTD预算表在SQL中的当前期间

时间:2013-04-09 09:10:01

标签: sql sql-server finance

我有一个表格,格式如下(伪代码):

CREATE TABLE [GLM_MASTER__BUDGET](
    [Budget_Year],
    [Budget_Type],
    [Account],
    [Period_1_Budget],
    [Period_2_Budget],
    [Period_3_Budget],
    [Period_4_Budget],
    [Period_5_Budget],
    [Period_6_Budget],
    [Period_7_Budget],
    [Period_8_Budget],
    [Period_9_Budget],
    [Period_10_Budget],
    [Period_11_Budget],
    [Period_12_Budget]
    )

我需要能够使用当前时期的int来查询它,例如6

这应该返回从1到指定数字的所有句点的组合值。

所以我最终得到这样的输出:

Budget_Year, Budget Type, Account, (Sum of all periods from 1 to the period specified) as Amount

我正在使用MS SQL服务器,因此可以在顶部执行以下操作:

DECLARE @current_period INT = 6 

1 个答案:

答案 0 :(得分:1)

如果您有机会重新设计此表,您可能希望立即考虑它。

您可以使用以下内容:

DECLARE @current_period INT = 6 



SELECT 
Budget_Year, Budget Type, Account,
CASE WHEN @current_period >= 1 THEN [Period_1_Budget] ELSE 0 END +
CASE WHEN @current_period >= 2 THEN [Period_2_Budget] ELSE 0 END +
CASE WHEN @current_period >= 3 THEN [Period_3_Budget] ELSE 0 END +
CASE WHEN @current_period >= 4 THEN [Period_4_Budget] ELSE 0 END +
.....
..
CASE WHEN @current_period >= 12 THEN [Period_12_Budget] ELSE 0 END As Amount
FROM [GLM_MASTER__BUDGET]

从你的描述中还不清楚你是否需要SUM和GROUP BY所以我把它遗漏了。