こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

並び替えで教えて下さい。

並べ替えで悩んでます。ご教授下さい。
下記のような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するような感じです。
方法をご教授頂きたいと思います。
よろしくお願いします。

投稿日時 - 2005-04-13 14:22:51

QNo.1328570

すぐに回答ほしいです

質問者が選んだベストアンサー

できた・・・かな?
ちょっと不安(^_^;)

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.日付

投稿日時 - 2005-04-13 16:42:39

お礼

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

投稿日時 - 2005-04-13 18:23:36

このQ&Aは役に立ちましたか?

7人が「このQ&Aが役に立った」と投票しています

回答(7)

ANo.7

ごめんなさい。ちょっと勘違いしてましたm(_ _)m

投稿日時 - 2005-05-11 15:04:12

ANo.6

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

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

投稿日時 - 2005-05-11 14:53:25

オラクルのバージョンによっては、分析関数の利用によって、結合を行わずに問い合わせできます。
環境にもよりますが、効率が良い可能性があるというところしか違いませんが..

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

投稿日時 - 2005-04-13 20:59:35

ANo.4

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

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

投稿日時 - 2005-04-13 18:13:18

ANo.2

あー、なるほど!
なんとなくわかりました。

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

投稿日時 - 2005-04-13 16:36:42

補足

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

投稿日時 - 2005-04-13 16:37:56

ANo.1

うーん・・・

> つまり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-04-13 14:53:47

補足

すみません。説明不足です。
でも表現しにくいので、下記の例を挙げます。
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:04

あなたにオススメの質問