0

MS Access を使用していくつかの計算を実行しています。以下は、私に問題を引き起こしている全体的なコードです。

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()

Criteriaより具体的には、私の目標は、この数式の結果をフィールドで指定されたテーブルに挿入することですTier_Juncture_1

(M * 0) + B _AS Tier_Juncture_1

ご覧のとおり、この方程式にはMと の 2 つの変数がありBます。それぞれの式は次のとおりです。

(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

私の質問は、元の式でTier_Juncture_1変数を使用できるように、SQL ステートメントのどこに 2 つの変数の式を配置すればよいかということです。上記のように、それらをFROM句に入れようとしましたが、次のエラーが発生します。Syntax error in FROM clause.

変数自体の式に問題はないはずです。私はそれらを個別にテストしましたが、どちらもエラーなしで正しい値を返します。SQL ステートメントのどこにそれらを配置するかを知る必要があるだけです。

アップデート

以下の提案に従って、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.

変数の方程式を元の投稿から挿入したため、このエラーが発生していると思いMますB。だから私の質問はまだ立っています。これらの式を SQL ステートメントのどこに配置すればよいでしょうか。

2回目の更新

によって返される SQL ステートメントは次のDebug.Writeline(cmd3.CommandText)とおりです。

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)

4

1 に答える 1

1

SQL、IE で非集計フィールドと集計関数を返すにはAvg(G.Growth)GROUP BY.

Calculationコードを見ると、フィールドとテーブル名に同じ変数を使用しているため、集計ではないことがわかります。

さらに支援が必要な場合は、検査のために結果の SQL を提供する必要があります。変数の内容はわかりません。いえ、Debug.Writeline(cmd3.CommandText)

于 2013-10-22T18:54:19.367 に答える