2016-03-25 7 views
0

年、月、スコアのテーブルがあり、毎月MAXスコアを分離するためのクエリが作成されました。今度は、新しい列の各項目をマークする更新クエリを作成したいと思いますが、MAXがどのように与えられているかはわかりません。MAXを含むクエリをAccessのUPDATEステートメントに変換する

SELECT a.Year, Max(a.Score) AS MaxOfScore, a.Month FROM a GROUP BY a.Year, a.Month, a.Score HAVING (((a.Month) Is Not Null));

は、どのように私は新しい列、a.Highに「X」を追加し、更新文を書くのですか?

おかげ

+1

タグなしのmysqlは良いスタートです。 – BK435

答えて

0

私はテーブルに静的な値としてこれを追加すると、あなたが本当に何をしたいかであることはよく分からないが、ここでそのためのコードです:

update a set a.high = b.MaxOfScore from 
a left join (
SELECT a.Year, Max(a.Score) AS MaxOfScore, a.Month 
FROM a 
GROUP BY a.Year, a.Month 
HAVING (((a.Month) Is Not Null)) 
) b on a.year = b.year and a.month = b.month 

とは何あなたはおそらくしたいですMS AccessのSQLで

SELECT a.Year, a.Month, a.Score, b.MaxOfScore from 
a left join (
SELECT a.Year, Max(a.Score) AS MaxOfScore, a.Month 
FROM a 
GROUP BY a.Year, a.Month 
HAVING (((a.Month) Is Not Null)) 
) b on a.year = b.year and a.month = b.month 
+0

ありがとうございました。はい、私がやったことについて上の私のコメントをパフェに見てください。基本的には、2番目の提案を拡張しました。 –

0

、更新クエリが更新可能でなければならないので、集計クエリがユニットレベルテーブルに結合することができません。代わりに、やりたいことは、単にクエリで値を選択しています。ただし、Domain Aggregate functionsを使用できます。また、月と年が文字列を囲む単一引用符でそれらの値を連結するようにしてくださいしている場合:

UPDATE a 
SET a.High = DMax("Score", "a", "Year=" & a.Year & 
           " And Month=" & a.Month & 
           " And Month Is Not Null"); 

ご注意:ドメインの機能は、MS AccessのUIプログラムではなくジェット/ ACEのSQLでSQLクエリでのみ使用可能ですEngineはODBC/OLEDBを使用してMSAccess.exeの外部で呼び出されました。

+0

ありがとう、 "更新可能な"ものは、それについて考えた後に明らかな意味を持ち、私のアプローチについて異なって考える必要があることを意味しました。私がしたのは、プライマリキーを含むSELECTクエリからMAKE TABLEを作成し、そのテーブルを自分のフィールドで更新した後、両方のテーブルのプライマリキーが等しい元のテーブルに対して更新ステートメントを実行しました。 –

+0

また別のアプローチ。あなたの問題を解決したと聞いてうれしいです。私の答えが役に立つのであれば、それを受け入れて解決を確認してください。 – Parfait

関連する問題