こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

SQLで優先順位が高いレコードを抽出する方法

こんにちは。

あるテーブル"T_A"が有り、
そのテーブルにカラム"C1"、"C2"が有ります。

テーブル"T_A"にレコードが以下の用に登録されていると仮定します。

C1|C2
-----
AA|S
AA|P
BB|R
BB|S
CC|S

※C2に登録されている値は抽出する優先順位が有り、
R:1
P:2
S:3
Rが一番優先順位が高く、Sが優先順位が最も低いです。

この条件から、C1の値が同じレコードに対して、C2の優先順位が
最も高いレコードを抽出したいです。

欲しい結果↓
C1|C2
-----
AA|P
BB|R
CC|S

投稿日時 - 2013-10-16 11:14:07

QNo.8307790

すぐに回答ほしいです

質問者が選んだベストアンサー

SELECT
C1,
(
CASE MIN(
CASE C2
WHEN 'R' THEN 1
WHEN 'P' THEN 2
ELSE 3
END
)
WHEN 1 THEN 'R'
WHEN 2 THEN 'P'
ELSE 'S'
END
) AS C2
FROM
Table1
GROUP BY
C1
ORDER BY
C1

投稿日時 - 2013-10-16 16:12:54

お礼

ご回答頂き、誠にありがとうございます。検証してみます。

投稿日時 - 2013-10-17 15:10:31

ANo.3

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(3)

ANo.2

分析関数が使える(2005以上?)なら

select C1, C2
from (
select C1, C2, row_number() over(partition by C1 order by case C2 when 'R' then 1 when 'P' then 2 else 3 end) RNUM
from T_A
)
where rnum = 1;


とか。

投稿日時 - 2013-10-16 13:46:11

お礼

ご回答頂き、誠にありがとうございます。検証してみます。

投稿日時 - 2013-10-17 15:10:38

ANo.1

「作業用クエリ1」として、以下のクエリを作成。

SELECT T_A.C1, IIf([C2]="R",1,IIf([C2]="P",2,3)) AS 順位, T_A.C2
FROM T_A
GROUP BY T_A.C1, T_A.C2;

「作業用クエリ2」として、以下のクエリを作成。

SELECT T_A.C1, Min(IIf([C2]="R",1,IIf([C2]="P",2,3))) AS 順位
FROM T_A
GROUP BY T_A.C1;

結果抽出用クエリとして、以下のクエリを作成。

SELECT 作業用クエリ1.C1, 作業用クエリ1.C2
FROM 作業用クエリ1 INNER JOIN 作業用クエリ2 ON (作業用クエリ1.順位 = 作業用クエリ2.順位) AND (作業用クエリ1.C1 = 作業用クエリ2.C1);

投稿日時 - 2013-10-16 13:06:32

お礼

ご回答頂き、誠にありがとうございます。検証してみます。

投稿日時 - 2013-10-17 15:10:43

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-