• 締切済み

テーブルのソート

postgresqlでソートする処理があります。 データとして、例えば、項目名をgrp,data とするとして grp,data 0,あああ 1,いいい 3,ううう 0,えええ 5,おおお 0,かかか 0,ききき 2,くくく というようなデータを 1,いいい 3,ううう 5,おおお 2,くくく 0,あああ 0,えええ 0,かかか 0,ききき というように取り出したいのです。 言葉にすると grpを0と0以外で抽出し、その中でdataソート(0以外の中からが優先) みたいな感じでしょうか。 二つのsqlを使えばできるでしょうが、なんとかひとつのsqlでできないでしょうか? よろしくお願いいたします。

  • jg1wjz
  • お礼率91% (148/162)

みんなの回答

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.2

UNIONは 取得するカラム数が同じ2つ以上のSQL文の結果を 結合するものよ だから今回にはぴったりのはず なのになぜ最後にorder byしちゃうの!? 1以上をorder byしたものと 0だけのをUNIONすればいいの

jg1wjz
質問者

お礼

askaaska さん、ありがとうございます。 最初にそのようにしたのですが    "union"またはその近辺で構文エラー になったんです。 で、order by をはずしたらエラーは消えたのですが それではまずいので 最後にorder byを追加したらエラーがでなかったもんで。^^; いろいろありがとうございました。

jg1wjz
質問者

補足

今、CASE WHEN を使って 自己解決しました! ・・・CASE WHEN grp>0 THEN 0 ELSE 1, data 昨日から悩んでいたので、ホッとしてます。 アドバイス、有難うございました。

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.1

grp >0 と grp=0 の結果を UNIONで結合すればいいと思うわ

jg1wjz
質問者

お礼

askaaskaさん、ありがとうございます。 試してみました。 unionを使ったことが無いので、 のせいかもしれませんが 思ったように取り出せませんでした。 最初のselect sqlで、where grp>0 もうひとつのselect で where grp<1 にして union で結合、最後に order by data にしました。 結果は 二つのselectが交じり合ったシンプルな(!)結果でした。 何か間違っていますか? tableは同じtableだとダメですか? 最初の結果を最初に取り出してから、 二つ目のselect結果をその後に取り出したいのですが。 よろしくお願いします。

関連するQ&A

  • ListViewのソートについて

    SQL文では "ORDER BY [項目1] ASC, [項目2] ASC" というように並び替えの優先順位に沿ってソートする事が出来ますが、 ListViewで同じようにソートすることは可能でしょうか? 1つの項目のみを対象にしたソートなら出来るのですが… バージョンはVB.NETになります。 ご教授よろしくお願い致します。

  • 文字列分割して、ソート出来ますか?

    SQL内で文字列を分割して、その値でソートすることは出来ますか? データ) First Name + Last Name が1つのフィールドに入っている。 リストアップ) Last Nameのみを抽出して、ソート。 こんなことは可能でしょうか?

  • VB 2005 データテーブルのソートについて

    恐れ入ります。 VB 2005 初心者です。 さっそく質問させていただきます。 VB 2005にて、SQL Server 2003を利用し、 とあるシステムを作成しています。 その中で、DBより取得したデータを、 DataTableのdatatblという変数に格納し、 さらにそのdatatblより、とある条件にて値が欲しくなったので、 dr = datatbl.Select("clm = " & strData & " AND clm2 = '0'") のようにし、DataRowのdrという変数につっこんでます。 ここで、ソートによる並んだデータとして値が必要になりました。 DBで取得し、条件でDataRowにつっこんだ後に、データを ソートすることは可能でしょうか? 可能であれば、やり方を教えていただけると幸いです。 宜しくお願いいたします。

  • Access2010のsortについて

    Access2010でデータベース内のデータをsortしたいのですが、意図するようにsortできません。 どのように処理すればよいか、お知恵をお貸しください。 具体的な内容は以下のとおりです。  sortする項目は住所の番地以降のデータです。   10-2    5-6   1-12   1-6 上田マンション101 というデータを   1-6 上田マンション101   1-12   5-6   10-2 というふうに並べ替えたいのですが、単純にsortすると   1-12   1-6 上田マンション101   10-2   5-6 となります。   01-06 とか ” 1- 6”のように桁の位置を意識して登録すれば うまくsortできるのでしょうが、住所を入力する立場からすると不自然で 面倒だと思います。 データを変換しないで、うまくsortする方法はないでしょうか?

  • 検索結果の再ソートを試みる。

    項番 商品番号 生産日 賞味期限 A B C D E 1 1 200407 200507 2 1 200307 200407 3 2 200404 200504 4 3 200406 200407 5 3 200405 200406 6 3 200404 200405 上記のテーブルがあったとして、以下の処理を実現するSQLを考えます。 1. 上記のものを、商品番号の昇順・生産日の降順(最新)でソートし、 商品番号毎に生産日が最新のものを抽出します (期待される結果:項番3、4、1の順で3つ抽出) 2. 取得したのを賞味期限の昇順にソートします ※項目は、項番商品番号生産日賞味期限の他にもABCDE……と存在するものとします。 カーソルオープン時に上記1、2を満たす事が条件です。 上記SQLの記述について、どなたか助言おねがいします。

  • Verilog でのソートの仕方

    いつもお世話になっております。 どなたかおわかりになる方教えて下さい。 verilogで9個(3×3)の8bit/個データを昇順か降順で並び替えて真ん中の5番目を抽出したいと考えています。 やっかいなのは、一度使用したの3×3の値の内6個は次回のソートで使用して、また5番目を抽出したいと考えていることです。 ※下記がイメージ図です。 ●●●  ○●●  ◎○● ●●●→○●●→◎○●→ ・・・ ●●●  ○●●  ◎○● ●:旧データ ○:新データ ◎:次の新データ このようなフィルターになるのですがどの様にしたらよいか教えて下さい。 9個の1回ソートなら出来るんですが、6個を再利用し、かつこの処理がSTOPをかけるまで延々と続くとなると出来ませんでした。 おわかりになる方、よろしくお願い致します。 以上

  • エクスプローラーでのフォルダソートについて

    エクスプローラーの詳細表示にてフォルダのソートを行う際、用途に応じてフォルダ名以外のソートを行いたいのですが、フォルダ名以外にユーザーが自由に設定できる項目はありますか?

  • 同じテーブル内の各CD、DATEごとの1番目レコードの抽出方法

    SQLについての質問です。 同じテーブル内の各CD、DATEごとの 1番目レコードの抽出方法がわかりません。 (CD、DATEでソート) テーブル名:TMP CD DATE KIN 1 2007/09/01 5555 1 2007/09/01 2000 1 2007/09/01 3000 2 2007/09/05 2222 2 2007/09/05 3333 3 2007/09/10 9999 抽出結果(CD、DATEでソート) 1 2007/09/01 5555 2 2007/09/05 2222 3 2007/09/10 9999 どのようにすると抽出できるのでしょうか? よろしくお願いいたします。

  • 集まり単位?でのソート

    FreeBSDに PostgreSQL7.4.6 + Apache + php4.3.10で色々と試していますが データソートのSQLについて悩んでいます 【テーブル(test)】 code name 1001 aaa 1002 bbb 2001 ccc 2002 ddd 3001 eee 4001 fff 【希望】 codeの4桁目基本にグループわけし、 各グループ単位で希望の順番(1,3,4,2)に並べたい グループ内は残り3桁の昇順で並べたい 【希望結果】 1001 aaa 1002 bbb 3001 eee 4001 fff 2001 ccc 2002 ddd

  • VB6で、抽出したデータのソートについて

    はじめまして。 どうしても分からないので、どなたかご教授頂けたらと思います。 VB6で、抽出したデータのソートを行いたいと思います。 大まかな流れは以下の通りです。 Dim objDb As Database Dim objTbl As Recordset   'mdbファイルからデータを抽出   Set objTbl = objDb.OpenRecordset(データ抽出条件式) (1)レコードセットした、objTblにフィールドを1つ追加したい。 (2)その追加したフィールドにデータを入れる。 (3)入れたデータで降順にソートしたい。 どうしても出来ないので、元のmdbから任意のフィールドを取得してきて、 そこに必要なデータを入れてソートしようとしたら、 .updateでmdb自体のデータを更新しないと出来ませんでした・・・ (mdbファイルは更新・変更等の操作を行ってはダメなファイルです。) この後の処理があるので、レコードセットしたobjTbl (もしくはそのコピーでもいいのですが・・・)を使った形で、出来ると良いのですが・・・ どうぞ、よろしくお願いいたします。