Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


120 / 2272 ツリー ←次へ | 前へ→

【12946】ユニオンクエリの昇順並べ替えについて まるこ 16/2/18(木) 17:01 質問[未読]
【12947】Re:ユニオンクエリの昇順並べ替えについて かるびの 16/2/19(金) 2:08 回答[未読]
【12951】Re:ユニオンクエリの昇順並べ替えについて まるこ 16/2/20(土) 15:11 お礼[未読]

【12946】ユニオンクエリの昇順並べ替えについて
質問  まるこ  - 16/2/18(木) 17:01 -

引用なし
パスワード
   こんにちは
何度も何度もすみません
また基本的な事で詰まってしまいました

よろしくお願いします

下記のようなユニオンクエリがあります

SELECT クエリA.CD, クエリA.取引先名, クエリA.支払予定日, クエリA.明細, クエリA.サブID
FROM クエリA
GROUP BY クエリA.CD, クエリA.取引先名, クエリA.支払予定日, クエリA.明細, クエリA.サブID, クエリA.抽出日付, クエリA.式1
HAVING (((クエリA.抽出日付)=[Forms]![フォームA]![コントロールA]))
ORDER BY クエリA.式1                          ・・・・・・※

Union all SELECT クエリB.CD, クエリB.取引先名, クエリB.支払予定日, クエリB.明細, クエリB.サブID
FROM クエリB
GROUP BY クエリB.CD, クエリB.取引先名, クエリB.支払予定日, クエリB.明細, クエリB.サブID, クエリB.抽出日付
HAVING (((クエリB.抽出日付)=[Forms]![フォームA]![コントロールA]))

UNION ALL SELECT クエリC.CD, クエリC.取引先名, クエリC.支払予定日, クエリC.明細, クエリC.サブID
FROM クエリC
GROUP BY クエリC.CD, クエリC.取引先名, クエリC.支払予定日, クエリC.明細, クエリC.サブID, クエリC.抽出日付
HAVING (((クエリC.抽出日付)=[Forms]![フォームA]![コントロールA]));

※の ORDER BY が全く機能せず、順番がぐちゃぐちゃになります

ちなみにクエリABC単体ではちゃんと機能して昇順に並びます
またクエリA,B,Cがごちゃまぜになるっていうことはありません
クエリB,Cにも※の部分は入っていますが入れたままだとエラーが出るのでユニオンクエリを作る際に削除しました

式1の並べ替え用にのみ存在するフィールドなのでクエリABCそれぞれチェックマークは外しています
(このユニオンクエリは出力用なので出力先の書式に合わせるため)

過去ログやネットで見つかりそうなものですが、うまく見つけられませんでした
よろしくお願いします

【12947】Re:ユニオンクエリの昇順並べ替えについて
回答  かるびの  - 16/2/19(金) 2:08 -

引用なし
パスワード
   >SELECT クエリA.CD, クエリA.取引先名, クエリA.支払予定日, クエリA.明細, クエリA.サブID
>FROM クエリA
>GROUP BY クエリA.CD, クエリA.取引先名, クエリA.支払予定日, クエリA.明細, クエリA.サブID, ク>エリA.抽出日付, クエリA.式1
>HAVING (((クエリA.抽出日付)=[Forms]![フォームA]![コントロールA]))
>ORDER BY クエリA.式1                          ・・・・・・※
>
>Union all SELECT クエリB.CD, クエリB.取引先名, クエリB.支払予定日, クエリB.明細, クエリB.サブID
>FROM クエリB
>GROUP BY クエリB.CD, クエリB.取引先名, クエリB.支払予定日, クエリB.明細, クエリB.サブID, クエリB.抽出日付
>HAVING (((クエリB.抽出日付)=[Forms]![フォームA]![コントロールA]))
>
>UNION ALL SELECT クエリC.CD, クエリC.取引先名, クエリC.支払予定日, クエリC.明細, クエリC.サブID
>FROM クエリC
>GROUP BY クエリC.CD, クエリC.取引先名, クエリC.支払予定日, クエリC.明細, クエリC.サブID, クエリC.抽出日付
>HAVING (((クエリC.抽出日付)=[Forms]![フォームA]![コントロールA]));
>
>※の ORDER BY が全く機能せず、順番がぐちゃぐちゃになります

 当然の結果ですね。

 ユニオンクエリの場合、ORDER BY 句は、一番最後にしか書けません。
 具体的に言うと、クエリCから成るクエリの HAVING 句の次にしか書けません。
 それ以外のところに ORDER BY 句を書いても無視されます。
 確か、ヘルプに書いてあったと思います。


 ただ、一番最後に「ORDER BY クエリA.式1」を書いたとすると、
クエリBやクエリCには、「式1」フィールドはないのでしょうから、
「式1フィールドがないよ」というような内容のエラーになるはずです。
 具体的には、「式1」と表示されたパラメータ・ボックスが出てくると思います。


 そこで、どうするかですが、クエリBやクエリCに「式1」フィールドを設けてやればいいです。
 
 その場合、クエリBやクエリCの「式1」フィールドには、
クエリAの並び替えを邪魔しないような定数を指定することになると思います。
 なお、この定数は、クエリAの「式1」フィールドのデータ型に合うものとしてください。

 例えば、クエリAの「式1」が長整数型の値を返すとすれば、こんな感じです。
SELECT CD, 取引先名, 2147483647 AS 式1
FROM クエリB
GROUP BY CD, 取引先名
HAVING 抽出日付=[Forms]![フォームA]![コントロールA]

 なぜ、定数を「2147483647」という時にしたかというと、
長整数型の数値の中で最大のものだからです。
 「2147483647」なら、クエリAの並べ替えを邪魔しないと思います。


>※の ORDER BY が全く機能せず、順番がぐちゃぐちゃになります
>
>ちなみにクエリABC単体ではちゃんと機能して昇順に並びます

 アクセスって、というよりも、リレーショナルデータベースってそういうものです。

 テーブルやクエリの各レコードは、並び順の情報を持っていません。
 例えば、クエリ甲で並べ替えを行い、クエリ甲をベースにして作ったクエリ乙があるとして、
 もしレコードが並び順の情報を持っていれば、それに基づいて、
クエリ乙にクエリ甲の並べ替え結果を反映させられますが、
レコードが並び順の情報を持たない以上、クエリ乙にはクエリ甲の並べ替えの結果は反映されません。

 あるいは、こうも言えるかもしれません。
 クエリ甲からクエリ乙に対して、クエリ甲で ORDER BY 句が設定されているという情報を通知してくれれば、
クエリ乙にクエリ甲の並べ替え結果を反映させられますが、
アクセスというアプリケーションは、そういう通知はしないという設計になっているのです。

 クエリ乙においてクエリ甲での並べ替えを反映させたければ、
クエリ乙において、改めて並び順を指定する必要があります。


【12951】Re:ユニオンクエリの昇順並べ替えについて
お礼  まるこ  - 16/2/20(土) 15:11 -

引用なし
パスワード
   かるびの様

できました!
ヘルプは見落としていました。
何度もお手を煩わせてすみませんでした。
ありがとうございました

120 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078188
(SS)C-BOARD v3.8 is Free