2016-06-23 8 views
0

Accessでフォームを作成して、ユーザーが商品のリストから商品を選択してから、選択した商品の平均価格をクエリで照会します。Access SQL:SELECTとUSER INPUTの組み合わせ

ユーザの入力フィールドはリスト(List147)です。ユーザーがCopperを選択したとし、平均をCopperに返すようにします。すべての商品の価格はCommMaterialという表にあります。下のスナップは、テーブルの外観を示しています。

enter image description here

私はSQLでかなり新たなんだと、これをコーディングするかどうかはわかりません。あたかもSELECTステートメントが動的である必要があるように見えますが、これを行う方法はわかりません。あなたが少しより多くのクエリ可能な形式にテーブルを取得するには、いくつかのSQLを使用することができ、動的SQLとVBAから保つために

SELECT AVG(CommMaterial.[Forms]![NameForm]![List147]) 
FROM CommMaterial; 
+1

は、あなたはそれが動的にする必要について正しいです。最終的には、これはおそらくあなたのスキーマが最大ではないようです。 'DateComm |のように設定されたテーブル。メタル|価格 'を使用すると、ダイナミックSQLを使用することなく、このドロップダウンの柔軟性を得ることができます。 – JNevill

+0

@JNevillそれは間違いなく選択肢ですが、私はそれが動的クエリを介して行うことが可能かどうか疑問に思っています。 –

+0

UNIONクエリを使用してテーブルのスキーマを再フォーマットすることによって、動的SQLルートに移動する必要がない回答を追加しました。 Accessフォームのほうが優れている人は、動的なSQLを実行するための合理的な方法があるかもしれませんが、Accessでそのようなものを構築した最後のときにVBAと痛みを覚えています。 – JNevill

答えて

2

:私はこのような何かを想像

SELECT DateComm, 'Copper' as Metal, Copper as Price FROM CommMaterial 
UNION ALL 
SELECT DateComm, 'Nickel' as Metal, Nickel as Price FROM CommMaterial 
UNION ALL 
SELECT DateComm, 'Aluminum' as Metal, Aluminum as Price FROM CommMaterial; 

あなたを与えるだろうどの3つの列で結果セット:

DateComm | Metal | Price 

は、クエリqry_CommMaterialとしてそれを救うことができると、あなたのSQLは次のようになります。

あなたはまた、あまりにも一つの大きなステートメントにそれをすべて強制でき
SELECT Avg(Price) FROM qry_CommMaterial WHERE metal = [Forms]![NameForm]![List147]; 

SELECT Avg(Price) 
FROM (
     SELECT DateComm, 'Copper' as Metal, Copper as Price FROM CommMaterial 
     UNION ALL 
     SELECT DateComm, 'Nickel' as Metal, Nickel as Price FROM CommMaterial 
     UNION ALL 
     SELECT DateComm, 'Aluminum' as Metal, Aluminum as Price FROM CommMaterial) as subUnion 
WHERE metal = [Forms]![NameForm]![List147]; 
+0

ありがとう!商品テーブルにはさらに多くの商品がありますので、商品ごとにラインを作成する必要があります。私は周りに遊んで、パフォーマンスなどの点で最も効果的なものを参照してください。 –

+0

これは、あなたの 'CommMaterial'テーブルの列が決して変化しない場合には、これを行う良い方法です。あなたが 'UNION'クエリを変更する必要があれば、適切に編集する必要があります。 Accessで本当に動的にしたい場合は、VBAを使用して列を解析し、それぞれを結合する必要があります。 – Sturgus

+0

これは欠点です:将来的に商品を追加する可能性が高いことです。つまり、ビジネスに追いつくために列を追加してから、UNION文に追加する必要があります。これが最大のテーブルではない理由ですスキーマは、私は完全にそれを変更したいとは思わない。場合によっては、枢軸軍のデータを連合で扱い、それを1日と呼ぶほうが簡単です。 – JNevill

関連する問題