再現しましたか...同じ結論になりました。Cが同じ行番号になってしまいますので目的に合いません。SQLポケットリファレンスではROW_NUMBERという関数がありますが、HSQLDBでは使えないのか、エラーになります。(月))作成中のクエリーを含めたサンプルのODBファイルを提供可能でしょうか。多くの方が問題を共有できるので、回答が期待できます。HSQLDBで利用できる関数は以下のページで確認できます。(月))M.Kamatakiさん、お世話になります。サンプルファイルを添付しました。query1が私なりに作ったものですが、重複無くNOをつけたいのですが、うまくいきません。(月))date、nameフィールドで並べ替えたいということですよね。この場合は、2つのフィールドをまとめて比較すればよいので、CONCAT関数で文字列として結合してしまいました。したがって並べ替えもIDフィールドではなくnameフィールドに変更しています。以下ではどうでしょう。;結果は下図のようになります。サンプルのようにdate、nameフィールドを合わせてユニークだった場合が前提条件なので、この条件から外れるデータだと、このクエリーではうまく番号付けできないです。その場合は、date、nameに加え、IDフィールドもCONCATすれば、番号付けできるでしょう。(この部分、訂正)ちょっと強引かもしれないので、他にも実現できる方法を募集ですね。(月))MySQLのCONCAT関数は3つ以上の引数を結合できるようですが、HSQLDBを含めそれ以外のDBのCONCAT関数の引数は2つまでです。以下のクエリーのように、date、IDフィールドをCONCATし、並べ替えをdate、ID、nameの順にするとうまくいくんじゃないかと思います。;下図のサンプルで検証してみました。(月))CONCATするフィールドが3つある場合は、次のようにCONCAT関数をネストして使えば実現できました。"ID"として、下図のサンプルのように、date、nameフィールドの順に並べ替えできました。さん、ありがとうごさいました。これ、初心者にはとても考え付かないことでした。;WHERE句に複数の条件を指定しています。理論的に正しいのはこちらの方法だと思います。SQLの奥深さを感じますねぇ。参考:順位を求めるsql文についてhttp://oshiete1.goo.ne.jp/qa367708.htmlどこかに落とし穴がないことを祈ってます。(火))なんかデータ量が増えるとすごい時間がかかりそうなSQLなので、ナンバリング部分はマクロとかのプログラムから後でくっつけてやったほうが良いのではないかな、とか思いました。(火))いずれにしても、データベース内容によって判断が必要でしょう。このあたりはデータベースのご担当の方にお任せします。完了にしますが、情報があれば追記もOKです。(火))SEQUENCEを使うと、プライマリキーのフィールドとは別に番号付けしたフィールドをSQLで実現できるようです。プライマリキーの昇順にのみ対応した番号付けになるようです。INTOすると良いかも。「0」から始まりますし、SQLを実行するたびに番号は増えていきます。SEQUENCEの説明はHSQLDBサイトの以下のページ、http://hsqldb.sourceforge.net/doc/guide/ch02.html#N104E1日本語の簡単な説明は以下です。(火))>また「0」から始まりますし、SQLを実行するたびに番号は増えていきます。以下のコマンド(「1」からの番号付けの例)でリセットできました。DROPしない限りデータベースに保持されるようです。並べ替えを行ったビューを作成し、そのビューを基に以下のようなSQLで、1からの番号付けが行えました。(木))ike@九州さん、どうもありがとうございます。システムテーブルを参考にされているので、faq/5/179「HSQLDBにはどのようなシステムテーブルがありますか」に簡単なシステムテーブルの表示方法を紹介しました。するとODBファイルに影響するかもしれません。わたしだけかもしれませんが、テーブルにアクセスできなくなりました。一度、ZIPアーカイブとして展開し、そのまま再度ZIP圧縮してテーブルにアクセス可能となりました。大丈夫だとは思います。プロセスが残っているのが原因でした。プロセスを殺してから、再度、OpenOffice.orgを起動し、データベースファイルを開くとテーブルにアクセスできました。その後、マクロを実行してもOpenOffice.org終了後、プロセスが残ることは、今のところありません。(金))最初に私もそうなりました。プロセスが残っているものでした。同一ファイルで一度きりで、後は何度やっても再発しないので、模索中の出来事だと思ってました。何処かの記述に問題あるのかもしれませんね。上記マクロについて、皆様は参考程度に留めて置いて下さいませ。普及加速に繋がるような気がしてます。コピーしてもう一度、新規にマクロを加えて確認してみましたが、今回は再現しませんでした。関係ないかもしれませんが、マクロ側で対処するなら、以下のコード(データベースコネクションのクローズ)をプロシージャの最後に加えるぐらいですかね。oCon.close()原因が想像できるので、対処のしやすいことは確かです。同じ結論になりました。(金))幾つか試行したところ、同じ結論になりました。マクロによる接続はマクロにて必ず終了しておく必要があるようですね。接続はまだされてないようです。クエリをGUIで開くコードが必ずエラーをはきました。接続確立がされるようで、その後ではマクロでクエリをGUI表示できます。テーブルの更新をさせて一石二鳥の動作を含めました。これで、既存のドキュメント上で初実行しても問題は再現しなくなりました。(金))ike@九州さん、たびたびありがとうございます。接続はまだされてないようです。わたしは、テーブルカテゴリを表示(DBとコネクト)してから、マクロを実行していたので、幸いにもエラーにはなりませんでした。これで、上記のマニュアル作業時と同じようにテーブルカテゴリの表示を待ってクエリーのGUI表示となりました。(土))SQLについて、技術評論社さんのWebサイトに面白い記事がありました。SQLによる番号付けが第1回のテーマになっています。SQLアタマアカデミーhttp://gihyo.jp/dev/serial/01/sql_academy2/000101関連フィールドを文字列として連結する方法も載っていました。わたしが最初に紹介した方法もそれほど外しているわけではないようです。Basicなどの手続き型言語に対して、SQLを「集合指向」の言語と紹介しています。ついてナイス記述だと思いました。文字連結SQLのみでの番号付けで、数値、IDを変更して正しく並び替えが出来ない現象がでたので、桁を合わせて並び替えを実施していたのですが5000件位で実行時間が数分間掛かりました。さんご指摘の通りでした。(月))たぶん「並べ替えをして、番号を付けたい」というのは、順位付けをしたいということもあると思います。その場合、意味がある順位まであらかじめ絞っておくという方法があります。HSQLDBの場合は、SELECT文にLIMIT句(要「SQLコマンドを直接実行」)を加えると制御できます。0」を加えると上位30番目までのレコードに絞り込めます。0」は省略可能で、任意の順番からなら「0」の数値を変えます[*]。「COUNT(*)」すると、1+2+3+4...というように数えるレコード数が増えていくので5000行だと12,502,500行((1+5000)×5000÷2)になるのかな。