アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんにちは。

あるテーブル"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

A 回答 (3件)

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
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/10/17 15:10

分析関数が使える(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;


とか。
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/10/17 15:10

「作業用クエリ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);
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/10/17 15:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す