PB 電子会議室

コメント

発言No. 更新日 題名(クリックすると発言内容と関連するコメントが表示されます)
12873 00/08/22 12:27:50 RE(4):PB6.5: 一致した項目の多いもの順にソートしたいのですが。教えてください。 By Mika★
12796 00/08/17 12:21:56 RE(3):PB6.5: 一致した項目の多いもの順にソートしたいのですが。教えてください。 By NAKKAN
12789 00/08/17 00:26:24 RE(2):PB6.5: 一致した項目の多いもの順にソートしたいのですが。教えてください。 By Taka
12783 00/08/16 18:43:52 RE(1):PB6.5: 一致した項目の多いもの順にソートしたいのですが。教えてください。 By Mika★
12761 00/08/16 11:15:03 PB6.5: 一致した項目の多いもの順にソートしたいのですが。教えてください。 By NAKKAN

カテゴリ:データウィンドウ
日付:2000年08月17日 00:26 発信者:Taka
題名:RE(2):PB6.5: 一致した項目の多いもの順にソートしたいのですが。教えてください。

Mika★さん、おはようございます。

>例えば、「IF(A = \'1\', 1, 0)」という感じの式の計算カラムを、条件の数だけ作って
>さらに、それらを全部合計した計算カラムを作って
>その合計の計算カラムでソートすれば、いけるのでは。

上記コメントは、「計算フィールド」ですよね? (^^;

わざわざ計算フィールドを、しかも条件の数だけ作るまでもないでしょう。
ソート式に、そのまま式を書くだけでOKです。

\"if(カラムA = \'1\',1,0) + if(カラムB = \'2\',1,0) + if(カラムC = \'3\',1,0) + if(カラムD = \'4\',1,0)\"
※この結果を降順にします


ORACLEなら、ORDER BY句に直接書いたほうが早いかもしれません。

ORDER BY
 DECODE(カラムA,\'1\',1,0) + DECODE(カラムB,\'2\',1,0) + DECODE(カラムC,\'3\',1,0) + DECODE(カラムD,\'4\',1,0)  DESC
※ORACLEは、SELECT句にないカラムや任意の式をORDER BYに書くことができます。


補足:
上記例ではソート用に数値を返しています。
これだと、カラムAのみヒットした行とカラムBのみヒットした行では、共に 1 になるので優先順位が不安定ですね。
1 or 0 ではなく、\'1\' or \'0\' を結合した文字列でソートすれば、
 カラムAのみヒットした行 = \'1000\'
 カラムBのみヒットした行 = \'0100\'
のようになるので優先付けを明確にすることができると思います。

付加情報:

PowerBuilder Version (記載なし)

Client SoftWare

OS Windows98
DBMS Oracle SQL*Net 8
Browser (記載なし)

Server SoftWare

OS (記載なし)
DBMS (記載なし)
WebServer (記載なし)

PowerSpaceの運営は、パワーフューチャー株式会社が行っております。
Copyright © 2013 Power Future Co., Ltd.