ここから質問投稿すると、最大10000ポイント当たる!!!! >>

SQLについて質問させてください。
以下の金額負担部所テーブル(kingaku_futan_busho)があります。
ID |busho|pict
-----+-----+---
ID01 |AAA |100
ID02 |BBB |20
ID02 |CCC |50
ID02 |DDD |30
ID04 |DDD |50
ID04 |EEE |50


これを以下のように並べ替えて表示したいと思います。
bushoの数は10を超える事はありません。
ID |busho1|pict1|busho2|pict2|busho3|pict3|
-----+------+-----+------+-----+------+-----+---
ID01 |AAA |100 | | | | |
ID02 |CCC |50 |DDD |30 |BBB |20 |
ID04 |DDD |50 |EEE |50 | | |

行のソート順は、可能なら pict の大きい順にしたいです。
不可能であれば pict の項目が無い、列の項目が意図通りでない等でも構いません。
Accessでのクロス集計を使った方法でも構いません。

よろしくお願いします。

A 回答 (1件)

rank()を使って番号つけたのをカラムごとにピックアップ。



select aaa.id,
max(decode(aaa.rank ,1,aaa.busho)),
max(decode(aaa.rank ,1,aaa.pict)),
max(decode(aaa.rank ,2,aaa.busho)),
max(decode(aaa.rank ,2,aaa.pict)),
max(decode(aaa.rank ,3,aaa.busho)),
max(decode(aaa.rank ,3,aaa.pict))
*****4個目以降も繰り返し*******
from (
select kingaku_futan_busho.id,kingaku_futan_busho.busho,kingaku_futan_busho.pict,
dense_rank() over( partition by kingaku_futan_busho.id order by kingaku_futan_busho.pict desc,kingaku_futan_busho.busho) rank
from kingaku_futan_busho
) aaa
group by aaa.id;

こんなんでどうでしょ。
11個目以降の部署を2行目とかあれば rankを割り算の整数部をgroupに入れ
余りmod()でdecode
decodeでもcaseでもすきなほうで。
    • good
    • 0
この回答へのお礼

>jhayashiさん
dense_rank()なんてあるんですね。
お陰さまで解決しました!
どうもありがとうございました(^-^)

お礼日時:2008/02/25 16:49

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


人気Q&Aランキング