質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

2回答

2825閲覧

SELECTで異なる条件(行数も違う)で抽出した結果を同一の表に表示することは出来ますか?

Y.Mamoru

総合スコア47

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2020/09/03 01:00

〇やりたいこと
oracleでSQLの勉強中です。
教本の課題に以下のようなものがありました。
//前提のテーブル条件
各店舗の売り上げと、それぞれの店の営業の売り上げが入力されたテーブルがある状態。
「各店舗の売り上げ合計と、営業別の売り上げ合計をの一覧を表示せよ(合計2つのSQLを作成)」
というものです。
テーブルの中身はざっくりですが、以下のようになっています。
_______________________
日付   |店舗  |営業名    |売り上げ   |
ーーーーーーーーーーーーーーーーーーーーーーー
2009/04/23 | A店  | ○○太郎  | 40000

2008/07/01 | B店   | ××子 | 25000

ーーーーーーーーーーーーーーーーーーーーーーー

課題文通りで考えると、
店舗ごとにGROUPBYでまとめた売り上げの合計と、営業ごとにGROUPBYでまとめられた結果を並べて表示するものだと考えています。

〇困っていること
上記の表示で困っています。
「SQL文 2つ」などの文言で調べると、UNIONなどが主に出てくるのですが、これは行数が同じ場合にしか正常に働きません。
嫌なことに、店舗ごとに売り上げ合計をまとめると23行分。営業ごとに売り上げ合計をまとめると7行分になります。

求められている結果は、
店舗毎の売り上げ合計一覧と、営業毎の売り上げ合計一覧を一気に表示できる一覧だと考えています。

〇試してみたこと
LIMITでそれぞれの表示行数をそろえさせようかとも考えましたが、この次の課題からも
この課題でつくる「合計一覧」を使うようなので、制限をかけるのは違うかと思い断念しました。

アドバイスお願い致します。

使用ツール:OSqledit

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/09/03 01:03

行と列 間違えてませんか? 行ならば問題ありません。
Orlofsky

2020/09/03 01:11

質問は修正可能。 GROUP BY は空白を埋めない。
Y.Mamoru

2020/09/03 01:16

m.tsさん、Orlofskyさん ありがとうございます! すみません、再度確認して気づきました。UNIONはカラムの方がそろっていないと駄目だったんですね。 行と勘違いをしていました。 ご指摘ありがとうございます!
guest

回答2

0

UNIONなどが主に出てくるのですが、これは行数が同じ場合にしか正常に働きません。

ダミーのカラムを追加して列数を合わせる。

SQL

1SELECT 'A' AS COL1, 'B' AS COL2 FROM DUAL 2UNION ALL 3SELECT 'Z' AS COL1, NULL FROM DUAL ;

のように。
行と列はきちんと覚えてください。

投稿2020/09/03 01:15

Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Y.Mamoru

2020/09/03 01:20

ありがとうございます! すみません、完全に間違えて覚えていました。。。
guest

0

ベストアンサー

合計2つのSQLを作成

ならUNIONするとSQLは1つになるので命題満たせないのでは。
違う項目を結合させるのは間違ってると思います。
正直にそれぞれSQLを1つずつ組めば良いのでは?

投稿2020/09/03 01:10

m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/09/03 01:12

ちなみにUNIONで行数の違いは関係ないので、何か勘違いしてるか、コード間違ってるんでしょうね。提示されていないので判断できませんが。
Y.Mamoru

2020/09/03 01:18

ありがとうございます! UNIONだと1つ扱いになってしまいますかね。 結果をまとめて1つの表に表すことはできたので、まずはこれで進めてみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問