アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんにちは。

顧客からの質問で、どういう目的かはわからないのですが、あるカラムの中にさまざまな種類のデータがあります。それをソートの意味の逆、ばらばらに並び替えたいのでそのようなSQLを考えてほしいといわれました。

具体的に言いますと
monthカラム
-------------
01
01
02
02
02
03
04
04
とあるテーブルを、SQLを発行してバラバラにする

monthカラム
-------------
01
02
04
01
02
03
02
04
のようにしたいのです。バラバラにした時に一つ前のデータと一つ後ろのデータと重複しないようにすればO.K.です。

どうかよき知恵がありましたら教えてください。DBはサイベースです。

A 回答 (4件)

monthカラムの他に必ずあるはずのID(プライマリキー)を利用すれば、仮想連番を取得できると思います。


idという名前の一意なフィールドがあるとすれば、こんな感じです。
select month, (select count(*) from hoge t2 where t2.id <= t1.id and t1.month = t2.month) as rownumber from hoge t1 order by rownumber;
ただし、適当なIDがなくてプライマリキーが複数のカラムからなっていた場合が問題かも。
    • good
    • 0
この回答へのお礼

mojimojioさん、回答ありがとうございます。
なるほど、助かります。こんなSQLはまだまだ思いもつかなかったです。。。。
対象となるデータについては、明日ではないと(←担当の人間がお休み)、詳細なところまではわからないのですが、プライマリーキーがあればかなり有効な手立てになることまちがいなしです。勉強になります。

お礼日時:2002/09/09 10:55

仮想連番をSQL文だけでつけるのは無理だと思います。


乱数を持ち込んでも問題の解決にはなりません。
(前のグループの乱数が全て、次のグループの乱数より大きいなんて事も起こります)

プログラムを介入させるか、データ数が少なければ人手で入れるかしか有りません。

蛇足ですが、どれかのグループのデータ数が全体の半数を超えていると、どんなにしても、バラバラにはなりません。
    • good
    • 0
この回答へのお礼

ymmasayanさん、回答ありがとうございます。
サイベースのユーザーガイドを一日中読んで、単純なSQLでは無理だと理解しました。
又、サイベースのバッチファイルがありまして、その中で条件文、ローカル変数でプログラムを書けば可能では??と今は模索しています。

> どれかのグループのデータ数が全体の半数を超えていると、どんなにしても、バラバラにはなりません。
よく考えるとそうですよね。。。一応、バラバラにできることを前提に行います。
ありがとうございました。

お礼日時:2002/09/09 10:44

ランダムだと意図したならびにならずに、前後に同じ数字が来る可能性があります。


仮想連番を同じ数値のデータ内でランダムに作成すればよいのかもしれませんね。
01 
01
01
01
01 --この01のデータ内でランダムに仮想連番をつける。

02
02 --この02のデータ内でランダムに仮想連番をつける。

データを作る上では、連番のほうが処理しやすいとは思いますが。
ランダム関数以外は、知らないですね。

プログラムをかぶせて良いのなら、方法はるかもしれませんが...
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
データベースに触って1ヶ月も経ってないので、大変助かります。

しかし、どのように書いたらいいか、1時間考えたのですが全然わかりません。
すいませんが、SQL文を教えてくださいませんでしょうか?ランダムではない仮想連番をつける方法を。

よろしくお願いします。

お礼日時:2002/09/06 13:56

直接の答えではないですがアイデアを。


同じ情報のデータに連番を付加し、その連番でソートする。
DBで仮想TABLEが作れるのか良く知りませんので、できるかどうかは解りませんが、ORDER BY で仮想連番、MONTHとすれば、バラけさせるのは簡単です。

1 01
2 01
1 02
2 02
3 02
1 03
1 04
2 04



1 01
1 02
1 03
1 04
2 01
2 02
2 04
3 02
    • good
    • 0
この回答へのお礼

madmanさん、お早い回答ありがとうございます。
一カラム挿入して、その中にランダム関数で番号を付加してそれをソートすればいいかなぁっておもいました。

仮想連番というのは、ランダム関数以外で作る方法はありますかね?

お礼日時:2002/09/06 12:28

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