- PR -

各ステータス中最も良いものを各々取得したい

1
投稿者投稿内容
ひろ
ベテラン
会議室デビュー日: 2003/12/26
投稿数: 97
投稿日時: 2006-12-07 16:34
お世話になります。現在以下の問題にて悩んでおります。

+------+------+------+------+------+------+
| COL1 | ST1 | ST2 | ST3 | ST4 | ST5 |
+------+------+------+------+------+------+
| A | 1 | 6 | 1 | 3 | 1 |
| B | 2 | 4 | 5 | 8 | 9 |
| C | 3 | 8 | 7 | 7 | 3 |
+------+------+------+------+------+------+

【仕様】
ステータスの優先順位は1,6,2,3,7,4,8,9。
各ステータス(ST1〜ST5)の中で最も良いステータスは以下の通りとなります。
ST1の最良ステータス:1
ST2の最良ステータス:6
ST3の最良ステータス:1
ST4の最良ステータス:3
ST5の最良ステータス:1

【質問】
上記のように各ステータスの中で最良のステータスをSQLにて取得したいのですが可能でしょうか。
(私の知識では無理だったので,現在はjavaプログラムで上記処理を行っております)
ご教授お願い致します。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2006-12-07 16:59
コード:
select
	case max(st1)
		when 9 then 1
		when 8 then 6
		.
		.
		else 0
	end as st1,
	case max(st2)
		when 9 then 1
		when 8 then 6
		.
		.
		else 0
	end as st2,
	.
	.
	.
from
	(	select
			case st1
				when 1 then 9
				when 6 then 8
				when 2 then 7
				.
				.
				.
				else 0
			end as st1,
			case st2
				when 1 then 9
				when 6 then 8
				when 2 then 7
				.
				.
				.
				else 0
			end as st2,
			.
			.
			.
		from
			table) as table



RDBがなにか知らないので、動くか知りませんが。
ひろ
ベテラン
会議室デビュー日: 2003/12/26
投稿数: 97
投稿日時: 2006-12-07 17:06
ご返信ありがとうございます。
申し訳ありません。環境の記述を忘れました。
環境を以下に記述します。

oracle9i
Tomcat5.0
j2sdk1.4.2_10
holic
ベテラン
会議室デビュー日: 2004/08/24
投稿数: 74
投稿日時: 2006-12-07 17:48
(x mod 5) * ( 1 + 0.6 * (x div 5))
あたりでいかが?

データの意味の設定をしなおすほうが賢いとは思うけれども。
とんくま
ベテラン
会議室デビュー日: 2005/08/02
投稿数: 56
お住まい・勤務地: 東京
投稿日時: 2006-12-08 03:22
Oracle でしたら、こんなのも有りかと...
DECODE(MAX(DECODE(col1,1,1,6,2,2,3,3,4,7,5,4,6,8,7,9,8)),1,1,2,6,3,2,4,3,5,7,6,4,7,8,8,9)


[ メッセージ編集済み 編集者: とんくま 編集日時 2006-12-08 03:23 ]
ひろ
ベテラン
会議室デビュー日: 2003/12/26
投稿数: 97
投稿日時: 2006-12-08 10:54
引用:

とんくまさんの書き込み (2006-12-08 03:22) より:
Oracle でしたら、こんなのも有りかと...
DECODE(MAX(DECODE(col1,1,1,6,2,2,3,3,4,7,5,4,6,8,7,9,),1,1,2,6,3,2,4,3,5,7,6,4,7,8,8,9)


[ メッセージ編集済み 編集者: とんくま 編集日時 2006-12-08 03:23 ]



なるほど・・・これなら可能ですね。大変勉強になりました。
あとは当テーブルのデータ件数が数千件有るのでresponseを計測してみようと思います。
ありがとう御座いました。
1

スキルアップ/キャリアアップ(JOB@IT)