2013-04-09 34 views
0

當期我有一個表的格式如下(僞代碼):YTD預算表中的SQL

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

如果您有機會重新設計這張表,你現在可能會考慮它。

你可以使用的東西沿着這些路線:

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,所以我已經離開它時它不是從你的描述清楚。

+0

這不是我的桌子,而是名爲Sage timberline的金融系統的一部分。每種類型和每年只有1個賬戶,這樣可以回答你的分組總結問題嗎? – lukemh 2013-04-09 09:19:45

+0

在這種情況下,我猜上面的查詢將解決您的問題,並且不需要SUM或GROUP BY。 – 2013-04-09 09:21:17