プロが教えるわが家の防犯対策術!

並べ替えで悩んでます。ご教授下さい。
下記のようなA、B、Cというフィールドがあり
それぞれデータが入っているとします。
取得する際の並び替えですが、

ABC
---------------------
aaa16
bbb15
ccc14
aaa24
bbb26
ccc25


ORDER BY Aとすると・・・

aaa16
aaa24
bbb15
bbb26
ccc14
ccc25


ORDER BY Bとすると・・・

aaa16
bbb15
ccc14
aaa24
bbb26
ccc25

ORDER BY Cとすると・・・

aaa24
ccc14
bbb15
ccc25
aaa16
bbb26

となります。
私がやりたいのは下記の順で並べ替えしたいのです。

ccc14
ccc25
bbb15
bbb26
aaa16
aaa24

つまりORDER BY B、Cの結果の1つ目のレコードの
AでGROPE BYするような感じです。
方法をご教授頂きたいと思います。
よろしくお願いします。

A 回答 (7件)

うーん・・・



> つまりORDER BY B、Cの結果の1つ目のレコードの
> AでGROPE BYするような感じです。

ここの意味がいまいち分からないのですが。
(私の理解力が足りないのか・・・。)

> ccc 1 4
> ccc 2 5
> bbb 1 5
> bbb 2 6
> aaa 1 6
> aaa 2 4

この結果だけ見たら、「order by A desc, B」ですけど、そうじゃないんですよね?
申し訳ありませんが、別の例も出してみていただけませんでしょうか?

この回答への補足

すみません。説明不足です。
でも表現しにくいので、下記の例を挙げます。
2005年3月1日時点での順位が高い人から並べたい。
              
名前  日付   順位
鈴木  20050301 4
鈴木  20050302 2
佐藤  20050301 3
佐藤  20050302 4
田中  20050301 2
田中  20050302 1
山田  20050301 1
山田  20050302 3

    ↓
   
名前  日付   順位
山田  20050301 1
山田  20050302 3
田中  20050301 2
田中  20050302 1
佐藤  20050301 3
佐藤  20050302 4
鈴木  20050301 4
鈴木  20050302 2


ORDER BY それぞれ名前・日付・順位としても上記の結果にはなりませんよね。
(日付+順位)でソートとして名前順に表示みたいな。。。
なんとも説明がヘタで申し訳ございません。。。

補足日時:2005/04/13 16:09
    • good
    • 0

あー、なるほど!


なんとなくわかりました。

ちなみに、ビューを使ったりとかしてもOKですか?
1回のSELECT文でもできるのでしょうけど、かなり複雑になりそうなので、
ビューが使えればそちらの方が良いと思うのです。
いかがでしょう?

この回答への補足

すみません。原則的にViewは使わないことになっているので、SELECT文でお願い出来ますでしょうか?

補足日時:2005/04/13 16:37
    • good
    • 0

できた・・・かな?


ちょっと不安(^_^;)

SELECT Tbl_A.名前, Tbl_A.日付, Tbl_A.順位, Tbl_C.順位 As 順位1
FROM TEST Tbl_A, (SELECT Tbl_B.* FROM TEST Tbl_B WHERE Tbl_B.日付=(SELECT Min(Tbl_D.日付) FROM TEST Tbl_D)) Tbl_C
WHERE Tbl_A.名前=Tbl_C.名前
ORDER BY Tbl_C.順位, Tbl_A.名前, Tbl_A.日付
    • good
    • 0
この回答へのお礼

出来ました!!
すばらしいです!
最高です!
本当にありがとうございました。

お礼日時:2005/04/13 18:23

select


A,
B,
C
from ocyan.テストm
group by A
order by B,C
;

ソートオーダは複数項目指定できるのでこれで出来ませんか?
    • good
    • 0

オラクルのバージョンによっては、分析関数の利用によって、結合を行わずに問い合わせできます。


環境にもよりますが、効率が良い可能性があるというところしか違いませんが..

select 名前, 日付, 順位
from
(
select
名前,
日付,
順位,
lag(キー, 1, キー) over(partition by 名前 order by キー) キー
from
(
select
名前,
日付,
順位,
decode(日付, min(日付) over(order by 日付), 順位) キー
from xxx
)
)
order by キー, 名前;
    • good
    • 0

名前  日付   順位


山田  20050301 1
山田  20050302 3
田中  20050301 2
田中  20050302 1
佐藤  20050301 3
佐藤  20050302 4
鈴木  20050301 4
鈴木  20050302 2

上のようなデータなら
WHERE で取得したい日付を指定して
ORDER BY で順位を並び替えじゃダメかな?
    • good
    • 0

ごめんなさい。

ちょっと勘違いしてましたm(_ _)m
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!