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

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

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

Oracle Databaseは、米オラクルが開発・販売を行うリレーショナルデータベース管理システムです。

A5:SQL Mk-2

A5:SQL Mk-2は、フリーのSQL開発ツールです。高機能で軽量、且つ分かりやすいことを目指して開発されました。SQLの実行やテーブル編集などの機能に加え、簡単な操作によりDB定義書やER図を自動生成することも可能です。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

SQL

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

Q&A

解決済

2回答

341閲覧

【SQL】件数を抽出し、1~スタートで文字列結合したい。

Ponpon.981

総合スコア3

Oracle Database

Oracle Databaseは、米オラクルが開発・販売を行うリレーショナルデータベース管理システムです。

A5:SQL Mk-2

A5:SQL Mk-2は、フリーのSQL開発ツールです。高機能で軽量、且つ分かりやすいことを目指して開発されました。SQLの実行やテーブル編集などの機能に加え、簡単な操作によりDB定義書やER図を自動生成することも可能です。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

SQL

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

0グッド

0クリップ

投稿2023/05/25 06:57

SQLについてアドバイス頂けますでしょうか。
RDBMSは、oracleを使用しています。

添付画像のように、同商品番号・同店舗コードで、発注日の件数を
商品番号の最後に「_件数」のような形で表現したいです。

<実施したこと>
以下のようなSQLを書いてみました。

SELECT 商品番号,
COUNT(商品番号),
店舗コード,
発注日
FROM  テーブルA

COUNT関数で、件数を抽出し、商品番号を件数を文字列結合すればいいのかと考えたのですが
「単一グループのグループ関数ではありません。」とのエラー。
そもそも件数を抽出できたとしても、その件数がお尻についたところで
私がやりたい形にはならない事がわかりました。
⇒例えば、添付画像では商品番号「012348」が3件ありますが
COUNT関数で抽出できたとしても、「012348_3」が並んでしまい
1~のスタートでは無い。

もし、良い案がありましたらアドバイス頂けると幸いです。
よろしくお願いいたします。

イメージ説明

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

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

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

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

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

guest

回答2

0

ベストアンサー

たとえば以下のようなSQLで実現可能です。

SQL

1SELECT 2 商品番号 || '_' || ROW_NUMBER() OVER (PARTITION BY 商品番号, 店舗コード ORDER BY 発注日) 商品番号, 3 店舗コード, 4 発注日 5FROM テーブルA

以下は稼働確認用のDDLです。

SQL

1CREATE TABLE テーブルA( 2 商品番号 CHAR(6) NOT NULL, 3 店舗コード CHAR(6) NOT NULL, 4 発注日 DATE NOT NULL 5); 6INSERT INTO テーブルA VALUES ('012345', '0001',TO_DATE('2022/04/29', 'YYYY/MM/DD')); 7INSERT INTO テーブルA VALUES ('012346', '0001',TO_DATE('2022/05/12', 'YYYY/MM/DD')); 8INSERT INTO テーブルA VALUES ('012347', '0001',TO_DATE('2022/06/25', 'YYYY/MM/DD')); 9INSERT INTO テーブルA VALUES ('012348', '0001',TO_DATE('2022/07/01', 'YYYY/MM/DD')); 10INSERT INTO テーブルA VALUES ('012348', '0001',TO_DATE('2022/07/21', 'YYYY/MM/DD')); 11INSERT INTO テーブルA VALUES ('012348', '0001',TO_DATE('2022/07/30', 'YYYY/MM/DD'));

投稿2023/05/25 12:55

neko_the_shadow

総合スコア2230

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

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

Ponpon.981

2023/05/26 01:24

コメントありがとうございます。 やりたかったことが実現できました! PARTITION BYは初めてお聞きするものでしたので、大変勉強になりました。
guest

0

とりあえずMySQLで書いておきますので適当に調整してください

SQL

1create table tbl(id int primary key,code varchar(10)); 2insert into tbl values 3(1,'012345'), 4(2,'012346'), 5(3,'012347'), 6(4,'012348'), 7(5,'012348'), 8(6,'012348'); 9select id,concat(code,'_',(select count(*) from tbl where code=t1.code and id<=t1.id)) 10from tbl as t1

投稿2023/05/25 08:51

yambejp

総合スコア114769

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

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

Ponpon.981

2023/05/25 09:00

早速のコメントありがとうございます。 参考にさせて頂きます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問