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

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

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

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

SQL

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

Q&A

解決済

1回答

721閲覧

ORACLEのSELECT文で質問: 一つのテーブル内の数値項目について、当該レコード自体の値と 同テーブル内の同一分類の集計結果を併記する方法として 最適な手立ては どういうものですか?

saya24

総合スコア247

Oracle

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

SQL

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

0グッド

0クリップ

投稿2020/10/14 13:26

編集2020/10/14 13:33

sql

1SELECT Z.場所コード, Z.品名コード, Z.ロットNO, Z.在庫数 FROM T_ZAIKO Z ORDER BY Z.場所コード, Z.品名コード, Z.ロットNO

同一品名コードの在庫が ロットNO違いで 他拠点に在庫されています。同一品名かつ同一のロットNOが 他拠点に跨いで在庫されているケースもありえるかも....知れません。
上記のSELECT文では 場所コード・ロットNOを明細の単位に 在庫数が 表示されますが、こちらに 全国での 同一品名の総在庫数を表示させるとした場合で 質問です。

今までは 総計表示を達成する対象が 同じ対象のテーブルに格納されていても 別SELECT文・副問合せから結果を得てきました。

SQL

1SELECT Z1.場所コード, Z1.品名コード, Z1.ロットNO, Z1.在庫数、Z2.総在庫 FROM T_ZAIKO Z1 LEFT OUTER JOIN 2(SELECT Z.品名コード, SUM(Z.在庫数) 総在庫数 FROM T_ZAIKO Z GROUP BY Z.品名コード) Z2 ON Z2.品名コード=Z1.品名コード ORDER BY Z1.場所コード, Z1.品名コード, Z1.ロットNO 3

これ以上にスマートな方法は ないのでしょうか?

そろそろ そこそこのレスポンスで 結果が出れば良い というレベルから卒業したく 恥を忍んで お聞きします。よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

見辛いので、整形します。
以下が質問のSQLです。

SQL

1SELECT Z1.場所コード, Z1.品名コード, Z1.ロットNO, Z1.在庫数, Z2.総在庫 2FROM T_ZAIKO Z1 LEFT OUTER JOIN ( 3 SELECT Z.品名コード, SUM(Z.在庫数) 総在庫数 4 FROM T_ZAIKO Z 5 GROUP BY Z.品名コード 6 ) Z2 7 ON Z2.品名コード=Z1.品名コード 8ORDER BY Z1.場所コード, Z1.品名コード, Z1.ロットNO

自己結合の場合、Window関数を使用すると、簡潔かつ高速です。

SQL

1SELECT 場所コード, 品名コード, ロットNO, 在庫数 2 , sum(在庫数) over(partition by 品名コード) as 総在庫 3FROM T_ZAIKO 4ORDER BY 場所コード, 品名コード, ロットNO

投稿2020/10/14 14:22

sazi

総合スコア25327

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

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

saya24

2020/10/14 17:59

saziさん、早速のご返答ありがとうございます。 やはり 便利な機能があるのですね、聞いてよかったです。 質問の掲載用・主旨を単純に伝えるため ごく簡単なSQL文にして お問い合わせしましたが 手元の課題は もう少し 難易度が高い発行文です。 確認・適用まで 少しお時間を頂戴致します。 まずは お礼まで、本当に助かります!
saya24

2020/10/15 07:34

saziさん、適用できました。気分最高! 今まで 同じ検索対象を並べることに、バカっぽいなぁ とは思いつつも 目前の課題を急ぎ対応することに迫られ 最適策の追求を怠ってきた自分がいました。 今後は こちらを活用していきます、ありがとうございました。
sazi

2020/10/15 07:38

Window関数の使用できないバージョンのDBMSもありますから、Window関数を利用せずに実現できていた事は、理屈も理解できていますし、無駄ではありませんよ。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問