2013-04-13 29 views
0

我試圖模擬MS-Excel公式與這個Excel字段: A - StudyYears 乙 - Inflation_Adjusted_Expenditures Ç - AnnualContribution d - ContributionIncrease ë - InterestIncome 的F - RunningBalance總結SQL中的4列用作相同SQL的字段?

當前的Excel光標位置:柱 - F,Row - 3 公式: F2 + E2 + C2 + B2

到MS-Access sql查詢。從不同的表中採取的領域。但是,字段RunningBalance最初是從表tblParameter字段StartingBalance中獲取的。該查詢的下一個RunningBalance記錄應該添加前一記錄中的四個字段。

由於循環引用是sql查詢中的問題,我嘗試創建一個像這樣的函數。

'************************************************************* 
' FUNCTION: PREV_RUNNINGBALANCE() 
' PURPOSE: Retrieve a value from a field in the previous record. 
' PARAMETERS: 
' StartingBalance - Starting Running Balance which is given 
' RefValue   - ID value 
' RETURN: The computed value for the 4 field mention located in the 
'   previous record. 
' EXAMPLE: 
' =Prev_RunningBalance(StudyYears, 404585) 
'************************************************************** 
Function Prev_RunningBalance(RefValue As Long, StartingBalance As Long) 

Dim dbs As DAO.Database 
Dim rsSQL As DAO.Recordset 
Dim strSQL As String 
Dim vRunningBalance As Integer 

On Error GoTo Err_PrevRecVal 
    strSQL = "Select Inflation_Adjusted_Expenditures, AnnualContribution, InterestIncome, RunningBalance FROM GenerateFundingPlanData WHERE StudyYears = " & RefValue 

Set dbs = CurrentDb 
Set rsSQL = db.OpenRecordset(strSQL, dbOpenDynaset) 

rsSQL.FindFirst "StudyYears = " & RefValue 

If Not rsSQL.NoMatch Then 
    'Return 0 
    Prev_RunningBalance = 0 
End If 

If rsSQL.BOF Then 
    Prev_RunningBalance = 0 
    'Prev_RunningBalance = rsSQL![Inflation_Adjusted_Expenditures] + rsSQL![AnnualContribution] + rsSQL![InterestIncome] + StartingBalance 
End If 

Do While Not rsSQL.BOF 
    ' Move to the previous record. 
    rsSQL.MovePrevious 
    ' Sum the fields to get the RunningBalance 
    ' RunningBalance = Inflation_Adjusted_Expenditures + AnnualContribution + InterestIncome + CurrentRunningBalance 
    Prev_RunningBalance = rsSQL![Inflation_Adjusted_Expenditures] + rsSQL![AnnualContribution] + rsSQL![InterestIncome] + rsSQL![RunningBalance] 
Loop 

'Close Connection 
rsSQL.Close 

Bye_PrevRecVal: 
    Set rsSQL = Nothing 'Deassign all objects. 
    Set dbs = Nothing 
Exit Function 
    Err_PrevRecVal: 
Resume Bye_PrevRecVal 
End Function 

嘗試函數後,我得到一個空結果。這是我的查詢示例。

SELECT Prev_RunningBalance(a.StudyYears, 404585) as RunningBalance, 
     a.StudyYears FROM AnalysisYears a; 

我使用正確的功能嗎?

請指出我。謝謝。

回答

0

在我看來,你可以通過使用SQL來完成你的目標。考慮示例表[RevenueByQuarter]:

FiscalYear RevenueQ1 RevenueQ2 RevenueQ3 RevenueQ4 
     2010   7   5   4   6 
     2011   8   6   6   5 
     2012   6   8   8   9 

在訪問下面的SQL查詢...

SELECT FiscalYear AS FY, 
    RevenueQ1, RevenueQ2, RevenueQ3, RevenueQ4, 
    RevenueQ1+RevenueQ2+RevenueQ3+RevenueQ4 AS RevenueFY, 
    (SELECT SUM(RevenueQ1+RevenueQ2+RevenueQ3+RevenueQ4) 
    FROM RevenueByQuarter 
    WHERE FiscalYear<=rbq.FiscalYear 
    ) AS RunningTotal 
FROM RevenueByQuarter rbq; 

...產生以下結果......

FY RevenueQ1 RevenueQ2 RevenueQ3 RevenueQ4 RevenueFY RunningTotal 
2010   7   5   4   6   22    22 
2011   8   6   6   5   25    47 
2012   6   8   8   9   31    78 
+0

是的!這是IT!..感謝你的迴應戈爾爵士。我低估了小於等於的有用性。 – Charlesliam