• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:抽出結果にレコードNoを付与することは可能?)

抽出結果にレコードNoを付与することは可能?

このQ&Aのポイント
  • 抽出結果に先頭から連番を振る方法について質問です。具体的には、MySQLのバージョン5.0.18を使用しています。抽出結果にレコードNoを付与したいと考えていますが、順位を付けたいのではなく、単純に連番を振りたいです。
  • 例えば、テーブル名がtest_tableで、カラムがkeys、data、valueの場合、以下のような抽出クエリを実行します。'keys'カラムには002が含まれているレコードを抽出し、'value'カラムで降順に並び替え、'data'カラムで昇順に並び替えます。
  • 抽出結果を表示する際に、レコードNoとして連番を表示したいです。具体的には、抽出結果の先頭から順に数字を振っていき、新たに'rec_no'というカラムを追加したいです。このような方法でレコードNoを付与することは可能でしょうか?一時テーブルは使用したくありませんが、ビューを使用することは許可されています。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

#1回答者です。 MySQLのバージョンが5.0系とのことなので、ストアド・プロシジャを利用する方法もあります。 以下の関数は、変数@nを使用し、関数が呼ばれるたびに+1します。最初に呼ぶときには、変数@nを初期化(0を設定)しておきます。 ●関数の定義 -- drop function user_rownum; delimiter // create function user_rownum() returns smallint begin set @n=@n+1; return @n; end; // delimiter ; ●関数の利用 set @n=0; select `keys`,`data`,`value`,user_rownum() from `test_table` where `keys` like '%002' order by `value` desc,`data` asc;

jojo12345
質問者

お礼

デ、デ、出来ました! DETERMINISTICのエラーが出て どこにDETERMINISTICを入れるべきか悩みましたが beginの前に DETERMINISTICを入れることで解決しました delimiter // create function user_rownum() returns smallint DETERMINISTIC begin set @n=@n+1; return @n; end; // functionいいですね 勉強になりました ありがとうございました!

その他の回答 (1)

回答No.1

SQL例です。 select x.`keys`,x.`data`,x.`value`, (select count(*)+1 from test_table where `keys`<x.`keys` and `keys` like '%002' ) as rec_no from test_table as x where `keys` like '%002' order by `value` desc,`data` asc;

jojo12345
質問者

お礼

お礼が遅れました もうしわけございません なるほど select カラム名の、このカラムに selectを入れ子できるとは知りませんでした 勉強になりました ありがとうございました

関連するQ&A