初歩的な質問で、申し分けありません
下記のクエリですが、開始(復活)~更新合成キーまで、パラメータクエリの入力が表示されます。
ACCESSが、フィールドとして、認識していないと思いました。
SELECT
ID,
親番,
売上先,
子番,
支店_営業所,
孫番,
現場名,
府県,
締日,
油種,
直近3ヶ月,
仕入,
売上,
利益,
仕入コード,
仕入先,
単価_ランク_コード,
単価_ランク,
開始(復活),
終了,
備考1,
備考2,
担当,
車番①,
車番②,
車番③,
車番④,
車番⑤,
車番⑥,
車番⑦,
車番⑧,
車番⑨,
売上先カナ,
支店_営業所カナ,
現場名カナ,
フラグ,
日付コード,
油種コード,
合成キー,
納入先業者名カナ,
親グループカナ,
締め日,
数量料,
更新用フラグ,
更新合成キー,
並べ順
FROM
(
SELECT
ID,
親番,
売上先,
子番,
支店_営業所,
孫番,
現場名,
府県,
締日,
油種,
直近3ヶ月,
仕入,
売上,
利益,
仕入コード,
仕入先,
単価_ランク_コード,
単価_ランク,
開始(復活),
終了,
備考1,
備考2,
担当,
車番①,
車番②,
車番③,
車番④,
車番⑤,
車番⑥,
車番⑦,
車番⑧,
車番⑨,
売上先カナ,
支店_営業所カナ,
現場名カナ,
フラグ,
日付コード,
油種コード,
合成キー,
納入先業者名カナ,
親グループカナ,
締め日,
数量料,
更新用フラグ,
更新合成キー,
IIf(直近3ヶ月 = DateAdd('m', -2, DateSerial(Year(Date()), Month(Date()), 1)), 1,
IIf(直近3ヶ月 = DateAdd('m', -1, DateSerial(Year(Date()), Month(Date()), 1)), 2,
IIf(直近3ヶ月 = DateSerial(Year(Date()), Month(Date()), 1), 3, 4))) AS 並べ順
FROM
Q_直近3ケ月 のコピー
) AS サブクエリ
ORDER BY
親番,
子番,
孫番,
並べ順,
油種コード ASC;
下記のように書き換えました。
カギ【】をつけると、フィールドとして認識されると思いました。
SELECT
[ID],
[親番],
[売上先],
[子番],
[支店_営業所],
[孫番],
[現場名],
[府県],
[締日],
[油種],
[直近3ヶ月],
[仕入],
[売上],
[利益],
[仕入コード],
[仕入先],
[単価_ランク_コード],
[単価_ランク],
[開始(復活)],
[終了],
[備考1],
[備考2],
[担当],
[車番①],
[車番②],
[車番③],
[車番④],
[車番⑤],
[車番⑥],
[車番⑦],
[車番⑧],
[車番⑨],
[売上先カナ],
[支店_営業所カナ],
[現場名カナ],
[フラグ],
[日付コード],
[油種コード],
[合成キー],
[納入先業者名カナ],
[親グループカナ],
[締め日],
[数量料],
[更新用フラグ],
[更新合成キー],
[並べ順]
FROM
(
SELECT
[ID],
[親番],
[売上先],
[子番],
[支店_営業所],
[孫番],
[現場名],
[府県],
[締日],
[油種],
[直近3ヶ月],
[仕入],
[売上],
[利益],
[仕入コード],
[仕入先],
[単価_ランク_コード],
[単価_ランク],
[開始(復活)],
[終了],
[備考1],
[備考2],
[担当],
[車番①],
[車番②],
[車番③],
[車番④],
[車番⑤],
[車番⑥],
[車番⑦],
[車番⑧],
[車番⑨],
[売上先カナ],
[支店_営業所カナ],
[現場名カナ],
[フラグ],
[日付コード],
[油種コード],
[合成キー],
[納入先業者名カナ],
[親グループカナ],
[締め日],
[数量料],
[更新用フラグ],
[更新合成キー],
IIf([直近3ヶ月] = DateAdd('m', -2, DateSerial(Year(Date()), Month(Date()), 1)), 1,
IIf([直近3ヶ月] = DateAdd('m', -1, DateSerial(Year(Date()), Month(Date()), 1)), 2,
IIf([直近3ヶ月] = DateSerial(Year(Date()), Month(Date()), 1), 3, 4))) AS [並べ順]
FROM
[Q_直近3ケ月 のコピー]
) AS [サブクエリ]
ORDER BY
[親番],
[子番],
[孫番],
[並べ順],
[油種コード] ASC;
すると、全てのフィールドで、パラメータクエリの表示がされます。
どのように修正をしたらいいでしょうか?
ご教示をお願いします。
パラメータダイアログが出るということは、FROM句のテーブルやクエリにその名前のフィールドがないとういことになります。
()や半角空白を含むフィールド名は[]でくくらないと認識できないので、前者のSQLがエラーになるのは当然ですが、後者のSQLでもパラメータが出るということは、[Q_直近3ケ月 のコピー] にその名前のフィールド名がないということになります。[Q_直近3ケ月 のコピー] のフィールド名とSQL内のフィールド名に相違がないのは確実ですか。
下記のサブクエリのSQLのみ実行した場合はどうなりますか。
[Q_直近3ケ月 のコピー]が選択クエリであるならば、
とりあえずそのクエリのデザイン( SQL )を
再度確認されることをお奨めします。
hatena様
同様に全てにおいて、パラメータクエリの表示がされます。
フィールドは、Q_直近3ケ月 のコピーには、すべてあります
こんな感じで、フィールドは存在します
これが画像です
sk様
返信ありがとうございます。
確認しまsたが、フィールドは存在します
[Q_直近3ケ月 のコピー]を、再度作成しましたら、作動しました。
お騒がせしました。
hatena様、sk様、回答ありがとうございました。
解決したのですね。よかったです。
ちなみに、質問のSQLですが、
サブクエリと親クエリのSQLが演算フィールド以外は同じなのに、わざわざサブクエリにしたということは、ORDER BY句に演算式を重複して記述するのを避けたいという意図でしょうか。
だとしたらORDER BY句にはフィールド名ではなくフィールド番号(何番目のフィールドか)を指定することもできます。それを利用すればサブクエリを使う必要はなくなります。
あと、演算フィールドの式もChoose, DateDiff関数を使えばもう少し簡略化できます。
御参考までにコード例を置いておきます。
hatena様
参考のコードありがとうございます。
そのまま投稿しようとおもったのですが、改行は、50行までと言われました。
私が、2番目に投稿した、SQL文ですが、作成時は、上手く表示されますが、一旦保存すると、Q_直近3ケ月 のコピーで、循環参照が発生していますとなります。
hatena様の参考コードを利用しました。
'''spl
Nz(Choose(DateDiff("m", [直近3ヶ月], DateSerial(Year(Date()), Month(Date()),1)+1,3,2,1),4) AS [並べ順]
'''
この部分で、演算子がありませんとなりました。
改善方法はありますか?
お手すきのときに、回答いただけたら幸いです。
このコードでも循環参照が発生していますとなります。
Q_直近3ケ月 のコピーのもとは、MT_検索テーブルから作成しています
お騒がせしました。循環参照は、解決しました。
参考までに、まったくの素人ですが、hatena様のコードを、ネットで調べて変更しました。
hatena様のコードも作動しました。
参考のコードの解説もありがとうございました。
大変参考になりました