こんにちは。
顧客からの質問で、どういう目的かはわからないのですが、あるカラムの中にさまざまな種類のデータがあります。それをソートの意味の逆、ばらばらに並び替えたいのでそのようなSQLを考えてほしいといわれました。
具体的に言いますと
monthカラム
-------------
01
01
02
02
02
03
04
04
とあるテーブルを、SQLを発行してバラバラにする
↓
monthカラム
-------------
01
02
04
01
02
03
02
04
のようにしたいのです。バラバラにした時に一つ前のデータと一つ後ろのデータと重複しないようにすればO.K.です。
どうかよき知恵がありましたら教えてください。DBはサイベースです。
No.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がなくてプライマリキーが複数のカラムからなっていた場合が問題かも。
mojimojioさん、回答ありがとうございます。
なるほど、助かります。こんなSQLはまだまだ思いもつかなかったです。。。。
対象となるデータについては、明日ではないと(←担当の人間がお休み)、詳細なところまではわからないのですが、プライマリーキーがあればかなり有効な手立てになることまちがいなしです。勉強になります。
No.3
- 回答日時:
仮想連番をSQL文だけでつけるのは無理だと思います。
乱数を持ち込んでも問題の解決にはなりません。
(前のグループの乱数が全て、次のグループの乱数より大きいなんて事も起こります)
プログラムを介入させるか、データ数が少なければ人手で入れるかしか有りません。
蛇足ですが、どれかのグループのデータ数が全体の半数を超えていると、どんなにしても、バラバラにはなりません。
ymmasayanさん、回答ありがとうございます。
サイベースのユーザーガイドを一日中読んで、単純なSQLでは無理だと理解しました。
又、サイベースのバッチファイルがありまして、その中で条件文、ローカル変数でプログラムを書けば可能では??と今は模索しています。
> どれかのグループのデータ数が全体の半数を超えていると、どんなにしても、バラバラにはなりません。
よく考えるとそうですよね。。。一応、バラバラにできることを前提に行います。
ありがとうございました。
No.2
- 回答日時:
ランダムだと意図したならびにならずに、前後に同じ数字が来る可能性があります。
仮想連番を同じ数値のデータ内でランダムに作成すればよいのかもしれませんね。
01
01
01
01
01 --この01のデータ内でランダムに仮想連番をつける。
02
02 --この02のデータ内でランダムに仮想連番をつける。
データを作る上では、連番のほうが処理しやすいとは思いますが。
ランダム関数以外は、知らないですね。
プログラムをかぶせて良いのなら、方法はるかもしれませんが...
回答ありがとうございます。
データベースに触って1ヶ月も経ってないので、大変助かります。
しかし、どのように書いたらいいか、1時間考えたのですが全然わかりません。
すいませんが、SQL文を教えてくださいませんでしょうか?ランダムではない仮想連番をつける方法を。
よろしくお願いします。
No.1
- 回答日時:
直接の答えではないですがアイデアを。
同じ情報のデータに連番を付加し、その連番でソートする。
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
madmanさん、お早い回答ありがとうございます。
一カラム挿入して、その中にランダム関数で番号を付加してそれをソートすればいいかなぁっておもいました。
仮想連番というのは、ランダム関数以外で作る方法はありますかね?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- IT・エンジニアリング ドメイン駆動設計の値オブジェクトについて質問 1 2023/05/13 02:50
- システム 帳票出力を行う単体テストのテストデータが作成できません 2 2023/08/26 21:26
- IT・エンジニアリング 帳票出力を行う単体テストのテストデータが作成できません 2 2023/08/26 21:25
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- MySQL SQLについて教えて下さい。 SELECT分で、あるカラムにある日付の 半年先のデータを取って来たい 3 2022/12/07 22:28
- PostgreSQL 列が存在しないと言われる 2 2023/02/10 18:33
- Oracle sqlで質問です。 idを元にidに紐付くデータで住所コードがjpのみのデータ以外のidを取得したい 4 2023/03/20 17:41
- Google Drive Googleスプレッドシートについて質問です。 今作っているデータで、 シート1→ベタ打ちでひたすら 2 2022/05/18 14:27
- Excel(エクセル) エクセルVBA オートフィルタでの絞り込みと並び替えについて 1 2023/07/08 13:08
- Access(アクセス) 対象月の2桁表示について 1 2023/01/07 05:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テーブルの列数を調べたい
-
WHEREなどの条件が多い場合、ど...
-
group byで最後のレコードを抽...
-
MySQL AUTO_INCREMENTが最大に...
-
フレンドリストのようなものを...
-
betweenを使うyyyy/mm/ddでの範...
-
MySQLのselect文で、最大ID値の...
-
INDIRECT関数の代替方法は?
-
一部のカラムでdistinctし全て...
-
GREATESTで NULLをスルーする方...
-
mysqlで50音順にorder byしたい。
-
whereで全てを検索する方法
-
SQLServerでNULLを挿入したいです
-
AUTO_INCREMENTに0はダメ?
-
カラムをコピーして、新規カラ...
-
LIKE演算子の%について教えて...
-
BULK INSERT時のNull許容について
-
now()かCURRENT_TIMESTAMPか
-
mySQL プライマリーキーのカラ...
-
SELECT文で、指定カラム以外の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テーブルの列数を調べたい
-
group byで最後のレコードを抽...
-
[MySQL]LOAD DATA INFILE一部レ...
-
MYSQLで小数点を表示する場合と...
-
「VARCHAR(255)」を「text」に...
-
WHEREなどの条件が多い場合、ど...
-
MySQL AUTO_INCREMENTが最大に...
-
フレンドリストのようなものを...
-
MYSQLのストアドでの動的SQLに...
-
select * での表示が崩れる?
-
MySQL テーブルの一部のカラム...
-
時間範囲が重複したレコードを...
-
MySQLのselect文で、最大ID値の...
-
betweenを使うyyyy/mm/ddでの範...
-
MySQL 改行コードを含む文字列...
-
誤って削除したIDカラムを復元...
-
[MYSQL]日付のカラムにデーター...
-
データの暗号化について
-
MySQLでのデータ入力について
-
MySQL側で計算してもらってレコ...
おすすめ情報