抽出結果にレコードNoを付与することは可能?
- 抽出結果に先頭から連番を振る方法について質問です。具体的には、MySQLのバージョン5.0.18を使用しています。抽出結果にレコードNoを付与したいと考えていますが、順位を付けたいのではなく、単純に連番を振りたいです。
- 例えば、テーブル名がtest_tableで、カラムがkeys、data、valueの場合、以下のような抽出クエリを実行します。'keys'カラムには002が含まれているレコードを抽出し、'value'カラムで降順に並び替え、'data'カラムで昇順に並び替えます。
- 抽出結果を表示する際に、レコードNoとして連番を表示したいです。具体的には、抽出結果の先頭から順に数字を振っていき、新たに'rec_no'というカラムを追加したいです。このような方法でレコードNoを付与することは可能でしょうか?一時テーブルは使用したくありませんが、ビューを使用することは許可されています。
- ベストアンサー
抽出結果にレコードNoを付与することは可能?
mysql5.0.18です よろしくお願いします 抽出結果にレコードNoを付与したいのです 実際には順位(同点は同順)としたいのですが 複雑になりそうなので 単純に、抽出結果に先頭から連番が振れればOKです 例えば テーブル名:test_table カラム:keys,data,value keys data value a001 aaaa 80 a002 aaaa 90 b001 bbbb 100 b002 bbbb 51 上記のテーブル内容から 抽出します Select keys,data,value From test_table Where keys Like '%002' Order By value Desc, data Asc 抽出結果 keys data value a002 aaaa 90 b002 bbbb 51 上記抽出結果を keys data value rec_no a002 aaaa 90 1 b002 bbbb 51 2 のように 抽出結果に先頭から連番を振りたいのです このようなことは実現できるのでしょうか? temporaryは使用したくありません (Dropのタイミングがよく分からないので・・・) viewはOKです 理想は・・・ Select keys,data,value,rec_no(auto increment) From test_table Where keys Like '%002' Order By value Desc, data Asc のような事ができないのかな?と妄想していますTT よろしくお願いします
- jojo12345
- お礼率73% (25/34)
- MySQL
- 回答数2
- ありがとう数3
- みんなの回答 (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;
その他の回答 (1)
- chukenkenkou
- ベストアンサー率43% (833/1926)
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;
お礼
お礼が遅れました もうしわけございません なるほど select カラム名の、このカラムに selectを入れ子できるとは知りませんでした 勉強になりました ありがとうございました
関連するQ&A
- 各NO内で、最大値を抽出するSELECT文がわかりません。
あるテーブル[SAMPLE]があります。 キーは、<NO>と<版数>です。データ内容は、 以下の通りです。 <NO><版数><名前> 1 1 AAAA 1 2 BBBB 1 3 CCCC 2 1 DDDD 2 2 EEEE このテーブルから、各NOで、版数が最大のものを抽出したいのです。 抽出後 → <NO><版数><名前> 1 3 CCCC 2 2 EEEE どのようなSELECT文になるのでしょうか? 教えてください。お願いします。
- ベストアンサー
- SQL Server
- ACCESSにて2つのテーブルの比較
2つのテーブルA,テーブルBがあります。テーブルBのデータ以外のデータを選ぶにはどうのようにすれば良いのでしょうか? テーブルA data--- aaaa bbbb cccc dddd aaaa cccc テーブルB data--- aaaa bbbb 欲しい結果 テーブルA data--- cccc dddd cccc よろしくお願い致します。
- ベストアンサー
- オフィス系ソフト
- 最大値を含むレコードの抽出
お世話になります。 SQLでIN句やサブクエリではなく、HAVING句+MAX関数を使用して最大値を含むレコードを抽出することはできるのでしょうか。 id | name | value --------------- 1 | aaaa | 2000 2 | aaaa | 1000 3 | bbbb | 1000 上の表でいうとnameフィールドでグルーピングしてidの1と3が抽出対象になります。MySQLを使用しておりますが、 標準SQLでお願いしたいです。 よろしくどうぞ。
- ベストアンサー
- MySQL
- エクセルで重複しているデータの抽出のしかたを教えてください。
エクセルで重複しているデータを抽出したいのですが・・。なにぶん初心者なもので簡単な方法があればよいのですが・・。 A列に日付 B列に企業名このデータが300件ほどあります。 Å列 B列 1月 1日 AAAA社 1月 4日 BBBB社 1月 8日 CCCC社 2月 1日 BBBB社 2月20日 DDDD社 3月 2日 AAAA社 と、あるとしてB列の企業名が重複しているものを抽出したいのですが・・・。この場合 AAAA社とBBBB社ですが。 これを簡単に抽出する方法はないでしょうか? 教えてください お願いいたします。
- ベストアンサー
- オフィス系ソフト
- 連結したフィールドでグループ化し、他のフィールドの最大値のレコード全体を抽出
図面管理のデータベースをつくっています。 連結したフィールドでグループ化し、他のフィールドの最大値のレコード全体を抽出したいのですが どのようにしたらいいのでしょうか? いろいろ調べたのですがなかなかよい結果が出ません。 お知恵をおかしください。よろしくお願いします。 mysqlバージョン:5.0.45 例 テーブル:a(図面管理) a_id(id) a1(図番) a2(種類用紙サイズ) a3(枝番) a4(図面名) a_id a1 a2 a3 a4 1 1 3P 0 aaaa 2 2 3P 0 bbbb 3 2 3P 1 bbbb 4 1 4P 0 cccc 5 1 4P 1 cccc 6 1 4P 1 cccc このテーブルのa1とa2を連結します。(連結フィールド:ren) a_id a1 a2 a3 a4 ren 1 1 3P 0 aaaa 13P 2 2 3P 0 bbbb 23P 3 2 3P 1 bbbb 23P 4 1 4P 0 cccc 14P 5 1 4P 1 cccc 14P 6 1 4P 2 cccc 14P 連結したもの(ren)をグループ化しますこのとき、枝番の値が高いレコードだけ抽出します。 a_id a1 a2 a3 a4 ren 1 1 3P 0 aaaa 13P 3 2 3P 1 bbbb 23P 6 1 4P 2 cccc 14P この最終的な結果を出す方法をお教えください。 おねがいします。
- ベストアンサー
- MySQL
- SQLでの条件抽出方法の記述
はじめまして。 今回、SQLである条件を絞りたいのですがその方法がいまいちピンと来ず、思考錯誤しております。 例えばですが… テーブルにCD,DATA,YMと定義します。 条件としては、 ・MAXを使わずに、YMという値の個々別の最新のもの ・同じCDは重複しない1件のみ(DISTINCT?) ・表示するのはCDとDATAのみ ・(下図で言うと)DATAは0402~0405まで(BETWEEN?) 図で表すと、 CD DATA YM ---------------- 01 AAAA 0401 01 AAAA 0402 01 AAAA 0403 01 AAaa 0404 01 AAaa 0405 ←01の最新 02 BBBB 0402 02 BBBB 0403 ←02の最新 03 CCCC 0402 03 CCCC 0404 03 cccc 0405 ←03の最新 03 cccc 0406 ←これは期間外 ↓ CD DATA YM ---------------- 01 AAaa 0405 02 BBBB 0403 03 cccc 0405 このように抽出したいのですが、良い書き方はあるでしょうか?
- ベストアンサー
- Oracle
- [Excel]重複データの一方のセルが持つ値を一方の空白セルに反映させたい
A列にある7000件ほどのデータの中から重複データのみを抽出し、 重複データの一方がB列に持つ値を、もう一方のデータのB列の空白セルに反映させたいのですが、方法はありますでしょうか? 「COUNTIF」を使って重複データの抽出はできますが、一方が持つデータをもう一方の空白に反映させることができません。 手作業では期限に間に合わない可能性がみえて焦っております。 恐縮ですがご教授いただけますでしょうか。 (例) [処理前] A列:B列:C列 1111:AAAA:aaaa 2222:BBBB:bbbb 3333:CCCC:cccc 1111: :dddd 2222: :eeee [処理後] A列:B列 1111:AAAA:aaaa 1111:AAAA:dddd 2222:BBBB:bbbb 2222:BBBB:eeee
- ベストアンサー
- その他(業務ソフトウェア)
- SQLのDELETEについての条件
いつもお世話になってます。 タイトルの通りなのですが、SQLを触れたばかりなので、DELETE文の条件をどう書くか悩んでいます。 以下のテーブルAとテーブルBがあるとします。 テーブルA NO CODE GROUP ---+------+------- 001 A20 AAAA 002 B10 AABB 003 B20 BBBB 004 A20 AABB 005 A10 BBBB 006 B10 AAAA テーブルB NO ID COMMENT ---+------+-------- 001 100 ****** 002 100 ****** 003 120 ++++++ 004 140 <<<<<< 005 170 \\\\\\ 006 110 %%%%%% 007 120 !!!!!! DELETEの条件として行いたいのは テーブルAのCODEが'A20'で、 テーブルAのその条件のNOとテーブルBのNOが同じものの時、条件に合ったテーブルBのレコードを削除したいものです。 例のテーブルでいえば、テーブルAはそのままで、テーブルBが次のようになるようにしたいです。 テーブルB NO ID COMMENT ---+------+-------- 002 100 ****** 003 120 ++++++ 005 170 \\\\\\ 006 110 %%%%%% 007 120 !!!!!! 分かりづらい説明かと思いますが、よろしくお願いします。 不明点があれば、補足にて追加していきます。
- ベストアンサー
- Oracle
- 1つのSQL文で文字列を置換する方法を教えてください。
以下のようなテーブルで、項目aに入力されているデータに含まれている[aaaa]を[bbbb]に置き換えたいのですが、どなたか1回で置き換えられるSQL文を教えていただけないでしょうか。 どうぞ、宜しくお願い致します。 table:TEST [項目名]/[データ] a / aaaaみかんりんご ■変換後■ [項目名]/[データ] a / bbbbみかんりんご
- ベストアンサー
- その他(データベース)
- 指定した複数範囲の値に一致する行を抽出するには
Excelで、シートAには商品コード一覧が入力されています。シートBには、シートAに登録されていない商品も含めた商品コード一覧が入力されています。 いま、シートBにおいて、シートAに登録済みの商品コードの行のみを抽出したいのですが、どのようにすればよいかわかりません。 具体的に書くと、 【シートA】 商品コード 商品名 商品単価 AAAA 商品A 100 BBBB 商品B 150 CCCC 商品C 170 【シートB】 商品コード 数量 注文日 AAAA 50 06/01 YYYY 30 06/01 CCCC 10 06/02 XXXX 30 06/02 BBBB 50 06/03 ZZZZ 30 06/04 上記例の場合、抽出結果が AAAA 50 06/01 CCCC 10 06/02 BBBB 50 06/03 となるような方法を探しています。 関数を使用しても構いません。 抽出結果は、Bシート自体に反映されても、別シートに作成されても構いません。 比較元の値が数個程度ならば、フィルタ機能でもなんとかなりそうですが、今回は数百件あり、しかも、規則性のない値なので、フィルタの抽出条件でもうまく導き出すことができません。 よろしくお願いいたします。
- ベストアンサー
- オフィス系ソフト
お礼
デ、デ、出来ました! DETERMINISTICのエラーが出て どこにDETERMINISTICを入れるべきか悩みましたが beginの前に DETERMINISTICを入れることで解決しました delimiter // create function user_rownum() returns smallint DETERMINISTIC begin set @n=@n+1; return @n; end; // functionいいですね 勉強になりました ありがとうございました!