2013-10-22 29 views
0

我正在使用MS Access進行一些計算。下面是給我找麻煩整體代碼:SQL語句中的變量方程式的放置位置?

Dim cmd3 As OleDbCommand = New OleDbCommand("INSERT INTO Criteria (Calculation, [Interval], Tier_Juncture_1, Weight) _ 
SELECT ?, ?, (M * 0) + B _AS Tier_Juncture_1, _ 
((Avg(C." & Calculation & " * G.Growth) - Avg(C." & Calculation & ") * Avg(G.Growth))/(StDevP(C." & Calculation & ") * StDevP(G.Growth)) * 10) AS Weight _ 
FROM (Sum(G.Growth)/Count(*)) - (1 * (Sum(C." & Calculation & ")/Count(*))) AS B, _ 
(Sum(C." & Calculation & " * G.Growth) - ((Sum(C." & Calculation & ") * Sum(G.Growth))/Count(*)))/(Sum(C." & Calculation & " * C." & Calculation & ") - ((Sum(C." & Calculation & ") * Sum(C." & Calculation & ")/Count(*)))) AS M, _ 
" & Calculation & " AS C INNER JOIN " & Growth_Rate & " AS G _ 
" & On_Statement & "", con) 
    cmd3.Parameters.AddWithValue("@Calculation", Calculation) 
    cmd3.Parameters.AddWithValue("@[Interval]", Interval) 
    cmd3.ExecuteNonQuery() 

更具體地講,我的目標是插入這個公式,我的表在現場Tier_Juncture_1命名Criteria結果:

(M * 0) + B _AS Tier_Juncture_1

正如你所看到的,我在這個方程中有兩個變量,MB。下面是公式的每個:

(Sum(G.Growth)/Count(*)) - (1 * (Sum(C." & Calculation & ")/Count(*))) AS B

(Sum(C." & Calculation & " * G.Growth) - ((Sum(C." & Calculation & ") * Sum(G.Growth))/Count(*)))/(Sum(C." & Calculation & " * C." & Calculation & ") - ((Sum(C." & Calculation & ") * Sum(C." & Calculation & ")/Count(*)))) AS M

我的問題是,凡在我的SQL語句,我把公式爲我的兩個變量SOT我原來的公式Tier_Juncture_1可以使用變量?正如你在上面看到的,我試圖把它們放在我的FROM條款中,但是我得到這個錯誤:Syntax error in FROM clause.

變量本身的公式應該沒有任何問題。我已經獨立測試了它們,並且都返回了正確的值,沒有錯誤。我只需要知道將它們放在我的SQL語句中的位置。

UPDATE

每下面的建議,我從我的SQL語句中刪除的參數。現在看起來是這樣的:

Dim cmd3 As OleDbCommand = New OleDbCommand("INSERT INTO Criteria (Calculation, [Interval], Tier_Juncture_1, Weight) _ 
SELECT " & Calculation & ", " & Interval & ", (M * 0) + B AS Tier_Juncture_1, _ 
((Avg(C." & Calculation & " * G.Growth) - Avg(C." & Calculation & ") * Avg(G.Growth))/(StDevP(C." & Calculation & ") * StDevP(G.Growth)) * 10) AS Weight _ 
FROM (Sum(G.Growth)/Count(*)) - (1 * (Sum(C." & Calculation & ")/Count(*))) AS B, _ 
(Sum(C." & Calculation & " * G.Growth) - ((Sum(C." & Calculation & ") * Sum(G.Growth))/Count(*)))/(Sum(C." & Calculation & " * C." & Calculation & ") - ((Sum(C." & Calculation & ") * Sum(C." & Calculation & ")/Count(*)))) AS M, _ 
" & Calculation & " AS C INNER JOIN " & Growth_Rate & " AS G _ 
" & On_Statement & "", con) 
    cmd3.ExecuteNonQuery() 

但是當我運行此我得到以下錯誤:Syntax error in FROM Clause.

我相信,因爲我插入了我原來的變量方程MB我得到這個錯誤帖子。所以我的問題依然存在。我在哪裏可以將這些公式放在我的SQL語句中。

月2日更新

這裏是Debug.Writeline(cmd3.CommandText)返回的SQL語句:

INSERT INTO Criteria (Calculation, [Interval], Tier_Juncture_1, Weight) SELECT Current_Ratio, MRQ, (M * 0) + B AS Tier_Juncture_1, ((Avg(C.Current_Ratio * G.Growth) - Avg(C.Current_Ratio) * Avg(G.Growth))/(StDevP(C.Current_Ratio) * StDevP(G.Growth)) * 10) AS Weight FROM (Sum(G.Growth)/Count(*)) - (1 * (Sum(C.Current_Ratio)/Count(*))) AS B, (Sum(C.Current_Ratio * G.Growth) - ((Sum(C.Current_Ratio) * Sum(G.Growth))/Count(*)))/(Sum(C.Current_Ratio * C.Current_Ratio) - ((Sum(C.Current_Ratio) * Sum(C.Current_Ratio)/Count(*)))) AS M, Current_Ratio AS C INNER JOIN Quarterly_Growth_Rates AS G ON (C.Ticker = G.Ticker) AND ((IIF(C.Period = 4, C.Year + 1, C.Year)) = G.Year) AND ((IIF(C.Period = 4, 1, C.Period + 1)) = G.Qtr)

+1

您的查詢CommandText正嘗試使用'SELECT?,?,... FROM ...',並且參數化查詢無法執行此操作。參數只能用於指定列*值*,而非列*名稱*或任意SQL文本。這可能是您實際上需要將SQL CommandText「粘合在一起」而不是使用參數替換的情況之一。 –

+0

@GordThompson我會如何「正確地粘合」我的SQL? – gromit1

+0

@GordThompson根據你的建議,我已經拿出了參數。新代碼列在我原來的帖子中。現在我得到這個錯誤'FROM子句中的語法錯誤'。我相信我得到這個錯誤是因爲我從原始文章中插入了變量'M'和'B'的方程。所以我的問題依然存在。我在哪裏可以將這些公式放在我的SQL語句中。 – gromit1

回答

1

爲了返回非集合領域和聚合函數在SQL,IE Avg(G.Growth),你必須suply a GROUP BY

通過查看您的代碼,我知道Calculation不是聚合因爲您使用相同的變量的字段和表名稱。

如果您需要進一步的幫助,您需要提供生成的SQL進行檢查,我們不知道您的變量是什麼。 IE,Debug.Writeline(cmd3.CommandText)

+0

我編輯了我原來的帖子。我之前發佈了錯誤的代碼。這是正確的代碼,我得到這個錯誤'在FROM子句中的語法錯誤'。我相信我得到這個錯誤,因爲我從我原來的帖子中插入變量'M'和'B'的方程。所以我的問題依然存在。我在哪裏可以將這些公式放在我的SQL語句中。 – gromit1

+0

我還添加了從'Debug.Writeline(cmd3.CommandText)' – gromit1

+1

產生的完整SQL。你的'from'子句全部搞砸了。你有'[Some Calculation] AS B,[Some Calculation] AS M,[Some Calculation]作爲C INNER JOIN ...'你在這裏做什麼?這不是正確的SQL。 – Steve