FreeBSDに PostgreSQL7.4.6 + Apache + php4.3.10で色々と試していますが
データソートのSQLについて悩んでいます
【テーブル(test)】
code name
1001 aaa
1002 bbb
2001 ccc
2002 ddd
3001 eee
4001 fff
【希望】
codeの4桁目基本にグループわけし、
各グループ単位で希望の順番(1,3,4,2)に並べたい
グループ内は残り3桁の昇順で並べたい
【希望結果】
1001 aaa
1002 bbb
3001 eee
4001 fff
2001 ccc
2002 ddd
No.1
- 回答日時:
試していないのでなんともいえませんが、caseとsubstrを使うとなんとかなると思います。
select code,name,
(case
when substr(code,1,1) = '1' then 1
when substr(code,1,1) = '2' then 4
when substr(code,1,1) = '3' then 2
when substr(code,1,1) = '4' then 3
end) as s
from test
order by s
参考になればいいのですが・・・。
この回答への補足
有り難うございます
caseを利用するのは思いつきませんでした
ただ、substr()で値をとるcodeは
sqlの結果で出る値と思うので、もう少し悩んでみます
今、union allも使えないかな?
と模索中なので、あわせて悩んでみます
No.2ベストアンサー
- 回答日時:
列codeのデータ型が示されていませんが、char(4)と仮定します。
>codeの4桁目基本にグループわけ
一般的には、一番左側は「一桁目」と言うと思います。
(1)例1・・・ソートのために、codeの先頭1文字と2文字目から3文字を参照するx、yを作る
select code,name,
case substr(code,1,1)
when '1' then 1
when '3' then 2
when '4' then 3
else 4
end as x,
substr(code,2,3) as y
from test
order by x,y
(2)例2・・・ソートのためのx、yを取り出さないようにするため、ビュー経由で操作
(a)ビューの定義
create view v_test as
select code,name,
case substr(code,1,1)
when '1' then 1
when '3' then 2
when '4' then 3
else 4
end as x,
substr(code,2,3) as y
from test
order by x,y
(b)操作
select code,name from v_test
アドバイス 有り難うございます
私のスキルが低いので、おおざっぱにしかイメージできません
自分なりに試したところ
下記のSQLで出来ましたので、当面これでいこうと思います
しかし、アドバイスいただいたことを
理解できるようにレベルアップも図りたいです
--------
SELECT * FROM (
(SELECT code,name FROM test WHERE code LIKE '1%' ORDER BY code)
UNION ALL
(SELECT code,name FROM test WHERE code LIKE '3%' ORDER BY code)
UNION ALL
(SELECT code,name FROM test WHERE code LIKE '4%' ORDER BY code)
UNION ALL
(SELECT code,name FROM test WHERE code LIKE '2%' ORDER BY code)
) AS u
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) ¥マークを含むパスの処理について(マクロ、または関数) 2 2022/12/25 02:11
- SQL Server ACCESSで3ファイルを結合して、表を作成するやり方を教えて下さい。 17 2022/08/15 20:34
- SQL Server ACCESSで複数テーブルを結合して、リストを作る方法を教えてください。 2 2022/08/12 19:32
- SQL Server ACCESSで表が作りたく、そのためのSQL文や設定方法を教えてください。 1 2022/08/15 12:28
- その他(データベース) カラム上の重複を削除するクエリを教えてください 3 2022/04/12 14:11
- JavaScript jsonテキストデータの並び替えができるサービスを教えてください 2 2022/08/05 20:16
- その他(Microsoft Office) パワークエリの複数ファイルのデータ統合について 3 2022/07/14 17:06
- Perl perl このテキストファイルを簡単に配列に入れるには? 2 2022/04/27 20:24
- Visual Basic(VBA) 【VBA】特定の文字で改行(次の行)に行きたい。 3 2022/04/11 17:20
- JavaScript 指定したパスが現URLに含まれていたら特定要素を削除するJavascriptのコードを教えてください 2 2023/04/27 17:58
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CSVファイルを読み込んでテーブ...
-
テキストボックスの背景をVB...
-
timestamp が空のデータを除い...
-
エクセルVBA 10分後にエクセル...
-
【SQL】他テーブルに含まれる値...
-
SELECT INTOで一度に複数の変数...
-
既存データをINSERT文にして出...
-
テーブル名が可変の場合のクエ...
-
pandasでsqlite3にテーブル作成...
-
フラグをたてるってどういうこ...
-
認知心理学で言うスクリプトとは?
-
複数レコードの複数フィールド...
-
ACCESSにおいてスキーマとは
-
Accessで今日から5日後
-
sqlに記述できない文字
-
SQL Server:UNIONで結合した結...
-
SELECTした結果に行番号を求めたい
-
副問合せを使わずにUNIONと同様...
-
timestampのデータはどのように...
-
group byで指定したカラム以外...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CSVファイルを読み込んでテーブ...
-
テキストボックスの背景をVB...
-
timestamp が空のデータを除い...
-
SQLSERVER 連番更新について
-
エクセルVBA 10分後にエクセル...
-
SQL SERVERの BULK INSERT
-
SELECT文で足し算をした場合、N...
-
配列データに対する、要素の追...
-
ACCESS テキストボックスに入...
-
データがリストアできない!!
-
エクセルVBEについて
-
時間の比較をしたい
-
平均値のもとめ方
-
AVR studio6でeepromリードでき...
-
1つのドメインを複数のDNSで管...
-
シーケンスを使わずに主キーを...
-
バッチファイルでrenを使用時、...
-
date型でのbetweenについて教え...
-
Japanese schools tests
-
PostgreSQLのnumericでの書き込...
おすすめ情報