
お世話になります。
Excelシートを一つのデータベースとみなして利用するプログラムを作成しているのですが、
データベースのある項目に紐づいている3つの項目から登録件数の多いものを抽出したいと
考えています。
<データベース内容>
↓データベースの中身
区分|理由1|理由2|理由3
1 | 5 | 7 | 6
1 | 5 | 7 | 5
2 | 7 | 6 | 5
・登録区分1つに対して登録理由を3つまで入力できるデータベースです。なぜデータベース
なのに理由欄が複数あるのかと疑問だと思うのですが、訳あってこの形を崩すことはできません。
上記のデータベースを使用してやりたいことは以下のとおりです。
(1)データベースから区分を選出
(2)その区分に対して登録された理由の件数を抽出
(3)抽出した件数の多い順に並び替え
(なんとなくこんな感じです。)
<抽出結果(区分1の場合)>
理由|件数
5 | 3
7 | 2
6 | 1
私の方でも上記のような結果になるよう考えてみたのですが、どうしても3つの列のデータを
統合した上で件数を出す方法が分からず悪戦苦闘しております。
ちなみに、使用しているOSはWindowsで、Excel2010でADOを使用してデータベースアクセスを
行っています。ADOは旧バージョンで.Netではありません。
説明が大雑把で申し訳ありませんが、良い案が御座いましたらご教授ください。
よろしくお願いいたします。
No.3ベストアンサー
- 回答日時:
#1、#2です。
すみません。漏れがあるので訂正。select 区分, 理由1 as 理由 from <テーブル名>
UNION ALL
select 区分, 理由2 as 理由 from <テーブル名>
UNION ALL
select 区分, 理由3 as 理由 from <テーブル名>
;
です。
UNION と UNION ALLの違いは、
UNION ALLだとおのおののselect結果すべてを返す、
UNION だけだと 区分, 理由 の重複を除去した結果を返す、の違いです。
No.2
- 回答日時:
#1ですが、補足が無い状態で推測して作りました。
仕様に応じて適宜変更してください。
1)以下の3つのSELECT文を作成して、UNION ALL で結合するクエリを作成。
・区分|理由1
・区分|理由2
・区分|理由3
つまり
select 区分, 理由1 as 理由
UNION ALL
select 区分, 理由2 as 理由
UNION ALL
select 区分, 理由3 as 理由
;
2)そのクエリ(列は区分, 理由)を元に集計する。
select 区分, count(理由) as 件数
from <上記のユニオンクエリ名>
group by 区分
;
この回答への補足
回答ありがとうございます。
こちらの案ですが、私が行ったテストでは接続にUNION ALLではなくUNIONを使って実行していました。
この場合は合計値が正しいものにならなかったのですが、一度UNION ALLを使用してテストしてみます。
こちらの回答を元にSQLを作成してみましたが、結果としては思うように件数を
取得することができませんでした。
ご教授いただいた3つのSELECT文を単体で動かした場合は適切な件数を取得できるの
ですが、この3つをUNION ALLで結合しFROM句に埋め込んで実行すると上手くいかないようです。
ですので路線を修正し、あえて3つのSELECT文をバラで実行した後、取得した結果を用いて
力技で件数の集計を行うことにしました。
理想的な結果にならかなったとはいえ今回の件で本当に参考になりました。
ありがとうございます。
No.1
- 回答日時:
まず、集計のルールは不明確なので例示データの確認をさせてください。
2行目の理由3が値[5]とあるのは正しい?
同一選択肢ありで重複排除なんですか?
理由の値[7]の件数が[2]とあるのは正しい?
この回答への補足
回答ありがとうございます。
>同一選択肢ありで重複排除なんですか?
Excelで作っている擬似データベースですので、同一選択肢が混入する場合はあります。
(つまり、入力時に強制力のある仕組みが存在しない。)
ですが、運用ルールでフォロー可能ですので無視して頂いてもOKです。
それともう一つ記載漏れがありましたが、理由欄は必須ではなく未入力の部分が存在します。
上記の内容を加味してデータベース例を更新しましたので、以下のもの参照ください。
<データベース内容>
区分|理由1|理由2|理由3
1 | 5 | 7 | 6
1 | 5 | 7 |
1 | 7 | |
2 | 7 | 6 | 5
<抽出結果(区分1の場合)>
理由|件数
7 | 3
5 | 2
6 | 1
>理由の値[7]の件数が[2]とあるのは正しい?
見直しましたがこちらは正しいと思います。
よろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- フリーソフト 色々な形式の個人情報を後で参照しやすいようWindow10で管理したいのですが、どんな方法があるの? 1 2023/04/29 16:46
- その他(データベース) 業務用のデータベースサーバーの選び方について 4 2022/11/22 10:22
- JavaScript Q&Aの掲示板を作成していてヤフー知恵袋やgoo質問のように質問ごとにURLを生成したい 5 2023/08/04 01:22
- JavaScript Typescript が必要な理由 1 2023/01/07 11:45
- Excel(エクセル) Indirect関数について、Formulatextで抽出した数式を参照したい。 1 2022/12/15 11:16
- Visual Basic(VBA) EXCEL VBA ユーザーフォームの内容をループでデータベースに登録したい。 2 2023/02/02 10:22
- Excel(エクセル) エクセル関数のXlookupのフィルハンドル機能(類した機能でも可)を知りたいです。 3 2022/09/20 20:02
- MySQL [1000地域 × 10カテゴリー = 1万件のテーブル]!グループ化? 1 2023/06/14 23:56
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- MySQL データベースの複製の仕方(mysql) 2 2023/05/30 18:24
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
-
大麻の使用罪がなかった理由や法改正での変更点、他国との違いを弁護士が解説
ドイツで2024年4月に大麻が合法化され、その2ヶ月後にサッカーEURO2024が行われた。その際、ドイツ警察は大会運営における治安維持の一つの方針として「アルコールを飲んでいるグループと、大麻を吸っているグループ...
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
データベースファイル(.db)を開...
-
テキストボックスにコントロー...
-
ACCESSのSQLで、NULLかNULLでな...
-
最新の日付とその金額をクエリ...
-
顧客データベースを作る場合、...
-
警察はスマホに保存した動画や...
-
Accessフォームからパラメータ...
-
カラム上の重複を削除するクエ...
-
シートが異なるセル同士を、相...
-
データベースとウェブ(WWW)の共...
-
シャープレジスター エラーコード
-
式を簡単にしてください。ACCES...
-
AccessのSQLで、FROM句の構文エ...
-
半角ハイフンに似た文字
-
データベースの勉強 公務員を目...
-
はじめてのAccess 2019 について
-
DBエラーを解決したい
-
ITパスポートについての質問で...
-
マイクロソフトAccessでsqlのas...
-
情報整理するのに、「 Fullfree...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
1つのSQLで2段階の抽出を行い...
-
limit offset はupdate文には使...
-
【SQL】項目に紐づいている情報...
-
2つフィールドを連結して検索す...
-
SQLで、過去で一番大きい日付の...
-
AccessVBAについて テーブルの...
-
条件を複数与えたい
-
ACCESS サブフォームについて
-
SQLでレコード間の値の交換
-
mysqlのindexとprimary keyにつ...
-
複数の値を1レコードに表示した...
-
SQLのinの使い方
-
こちらのテーブルにあってこち...
-
【SQL】他テーブルに含まれる値...
-
フラグをたてるってどういうこ...
-
SELECT INTOで一度に複数の変数...
-
sqlに記述できない文字
-
UPDATEで既存のレコードに文字...
-
truncate tableを使って複数の...
-
PostgreSQLのtimestamp型で時間...
おすすめ情報