使いやすいように設計された Microsoft リレーショナル データベース管理システムのファミリ。
毎回迅速にご回答いただき、本当にありがとうございます!
いただいたSQLを見ながら対応を考えたいと思います!ありがとうございました!
このブラウザーはサポートされなくなりました。
Microsoft Edge にアップグレードすると、最新の機能、セキュリティ更新プログラム、およびテクニカル サポートを利用できます。
よろしくお願いいたします。
タイトルの通り、複数値フィールドの値を、特定の条件で並び替えることができないかどうか、伺います。
※なるべく詳細にテーブルの条件を記載しますが、それらが不要であれば**「○やりたいこと(期待している結果)」**からご確認いただけますと幸いです。
以下のような条件で構築しております。
○リレーション
※副担当フィールドは作業者IDと紐づけて複数値が入るフィールドになっております。
○テーブル構成、データ内容
・業務内容テーブル
|_テーブル構成
<フィールド名> <データ型>
業務内容ID オートナンバー型
業務内容名 テキスト型
主担当 数値型
副担当 数値型
|_データ内容
業務内容テーブル
| 1 | 業務A | 佐藤 | 田中, 鈴木, 江藤, 安藤 |
|---|---|---|---|
| 2 | 業務B | 佐藤, 田中, 鈴木, 江藤, 安藤 | |
| 3 | 業務C | 鈴木 | 佐藤, 江藤, 安藤 |
| 5 | 業務D | 江藤 | 田中, 鈴木, 江藤 |
※主担当、副担当は作業者マスタを作業者マスタID(後述)をキーにしてルックアップし、作業者名(後述)を表示しています。
・作業者マスタ
|_テーブル構成
<フィールド名> <データ型>
作業者ID オートナンバー型
作業者名 テキスト型
フリガナ テキスト型
役職ID 役職ID
|_データ内容
作業者マスタ
| 1 | 佐藤 | サトウ | 平社員 |
|---|---|---|---|
| 2 | 田中 | タナカ | 課長 |
| 3 | 鈴木 | スズキ | 社長 |
| 4 | 江藤 | エトウ | 部長 |
| 5 | 安藤 | アンドウ | 部長 |
※役職IDは役職マスタを作業者マスタID(後述)をキーにしてルックアップし、作業者名(後述)を表示しています。
・役職マスタ
|_テーブル構成
<フィールド名> <データ型>
役職ID 数値型
役職名 テキスト型
|_
役職マスタ
| 1 | 社長 |
|---|---|
| 2 | 部長 |
| 3 | 課長 |
| 4 | 平社員 |
そして、以下のようなことを実現したいと考えております。
○クエリ
上記のテーブルを使って、以下のようなクエリを作成しました。
|_構成
|_SQL
SELECT 業務内容テーブル.業務内容名, 業務内容テーブル.主担当 AS 主担当, 業務内容テーブル.副担当 AS 副担当
FROM 作業者マスタ RIGHT JOIN (業務内容テーブル LEFT JOIN 作業者マスタ AS 作業者マスタ_1 ON 業務内容テーブル.副担当.Value = 作業者マスタ_1.作業者ID) ON 作業者マスタ.作業者ID = 業務内容テーブル.主担当;
|_出力結果
| 業務A | 佐藤 | 田中, 鈴木, 江藤, 安藤 |
|---|---|---|
| 業務B | 佐藤, 田中, 鈴木, 江藤, 安藤 | |
| 業務C | 鈴木 | 佐藤, 江藤, 安藤 |
| 業務D | 江藤 | 田中, 鈴木, 江藤 |
○やりたいこと(期待している結果)
上記の出力結果を、以下を条件にして出力しなおしたいと思います。
・作業者マスタの役職IDを第一条件、フリガナを第二条件にして昇順にし、副担当の中身を並び替えたい。
|_期待する出力結果
| 業務A | 佐藤 | **鈴木,安藤,****江藤,**田中 |
|---|---|---|
| 業務B | **鈴木,安藤,****江藤,**田中,佐藤 | |
| 業務C | 鈴木 | **安藤,**江藤,佐藤 |
| 業務D | 江藤 | **鈴木, 江藤,**田中 |
|_目的
複数値フィールドを出力し台帳を作成したのはいいのですが、成果物としてデータを作成しているときに、副担当者の並びが役職順(およびフリガナ順)ではなく単純なレコードの追加順になっていることに気づきました。そりゃそうなのですが広く一般的に使用する資料の元データとなる可能性もあるので、対象フィールドを役職/フリガナで昇順並び替えをしたいと思います。
可能な限りクエリで処理したいのですが、無理であればVBAを組むこともやむなしかと考えております。
ただし、テーブル構造自体を変更する(作業者マスタの主キーを入れなおす等)のはなしの方向で考えています。
短い期間に立て続けに質問させていただき恐縮ですが、今度もまた皆様のお知恵を拝借させていただけますと幸いです。
不備等ありましたらご指摘ください。
以上よろしくお願いいたします。
使いやすいように設計された Microsoft リレーショナル データベース管理システムのファミリ。
ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。
毎回迅速にご回答いただき、本当にありがとうございます!
いただいたSQLを見ながら対応を考えたいと思います!ありがとうございました!
副担当フィールドのルックアップの値集合ソースを並び順を指定したSQLにすればいいかと思い試してみました。
値集合ソース
SELECT * FROM 作業者マスタ ORDER BY 役職ID, フリガナ;
結果、ドロップダウンリストは並べ替えられましたが、フィールドの表示は変化無しでした。
ここは前の質問で利用したDJoin2を使用することになりそうです。
DJoin2関数で、ソース(第2引数)にサブクエリを設定して、最後の引数で並べ替えを指定してみました。
SELECT
業務内容テーブル.業務内容名, 業務内容テーブル.主担当,
DJoin2("作業者名","(SELECT 業務内容ID, 作業者名, 役職ID, フリガナ FROM 業務内容テーブル INNER JOIN 作業者マスタ ON 業務内容テーブル.副担当.Value = 作業者マスタ.作業者ID)","業務内容ID=" & [業務内容ID],255,",",False,"役職ID,フリガナ") AS 副担当
FROM 業務内容テーブル;
このクエリで希望通りに表示できました。
ただ、式も複雑になるし、レコード数が多いと重くなるかもしれません。
最終目的が印刷物なら、前の回答でも紹介した下記のリンク先の方法の方がシンプルかもしれません。
グループ内のデータを横連結する - hatena chips
これなら、レポートのグループ化、並べ替えで希望の並び替えを指定するだけです。