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.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
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も使えないかな?
と模索中なので、あわせて悩んでみます
お探しの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ランキング
-
PostgreSQL serial型の質問
-
コマンドプロンプトのエラー
-
timestamp が空のデータを除い...
-
SQLです!!教えてください。あ...
-
timestampのデータはどのように...
-
pandasでsqlite3にテーブル作成...
-
既存テーブルにカラム追加でサ...
-
集計でテストの各教科の最高得...
-
AccessとSQL Serverの連携について
-
SQLです!!教えてください。あ...
-
フラグをたてるってどういうこ...
-
sqlの副問合せについて
-
【SQL】他テーブルに含まれる値...
-
【sqlite3】deleteしても.dbフ...
-
エクセルvbaでpostgresに接続を...
-
【VB】セルが空になるまで処理...
-
selectの単純繰り返し
-
Excel VBAのユーザーフォームで...
-
カテゴリと個別商品の集計SQLに...
-
下記の問合せを行うクエリを、 ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CSVファイルを読み込んでテーブ...
-
timestamp が空のデータを除い...
-
テキストボックスの背景をVB...
-
エクセルVBA 10分後にエクセル...
-
ACCESS テキストボックスに入...
-
SQLSERVER 連番更新について
-
配列データに対する、要素の追...
-
SELECT文で足し算をした場合、N...
-
SQL SERVERの BULK INSERT
-
PreparedStatementでの複数検索
-
平均値のもとめ方
-
型について
-
PostgreSQL serial型の質問
-
シーケンスを使わずに主キーを...
-
データがリストアできない!!
-
1つのドメインを複数のDNSで管...
-
(Linux、データベース初心者)...
-
Accessエクスポート時に連番を...
-
エクセルVBEについて
-
エクセルと同じファイル名でc...
おすすめ情報