2016-04-28 11 views
0

同じユニークID内の複数の条件に基づいてSQLテーブル内の行を選択しようとしています。SQL Server:同じユニークID内の複数の条件に基づいて行を選択

ID              ステータス
                AS
       :

私は、次の表を持っています3210      撮影
 次のように

ルール
である             とおり

  • [ID]を持っている場合、両方の '撮影' と 'AS' 「Rec」の行だけを選択します。つまり、 'Rec'は 'AS'より優先されます。

  • [ID]に「Rec」がない場合は、「AS」の行を選択してください。

クエリには、行ID=1,Status=ASID=2,Status=Recのみを出力します。

これらの2つの行を選択するクエリは何ですか?

答えて

1

値の順序として機能するヘルパー列またはフィールドを作成できますか?

Rec = 3 
AS = 2 
.... 

次に、ここでの説明や関連記事を参照してください。これはあなたのために働くだろうかのように聞こえる「各グループから1つの最大行を選択」のhttps://stackoverflow.com/a/2129703/5819421

記事の会談を。

+0

追加の列を作成することはできません。単純に 'WHERE [newCol] = 'whatever''条件を追加できれば簡単ですが、私はこれを制御できません。 – BansheeAce

0

擬コード:英語で

SELECT DISTINCT Id, Status 
FROM MyTable 
WHERE Status = 'Rec' 
OR (
Status = 'AS' 
AND NOT EXISTS(
    SELECT * FROM MyTable WHERE Status='Rec', correlated to outer query on Id 
) 
) 

、ステータスが「REC」またはどこステータスが「AS」で、同じIDには、「録音」はありませんある行の明確なセットを取得。

1
; WITH CTE AS (
    SELECT ROW_NUMBER() OVER (PARTITION BY id ORDER BY status DESC) rn, ID, Status 
    FROM (
     SELECT DISTINCT id, status 
     FROM MyTable 
    )--in case you have several Rec's and AS's 
) 
SELECT id, status 
FROM CTE 
WHERE rn = 1 
+0

もちろん、考慮したくない他のステータス値がある場合は、CTEの派生テーブルをさらにフィルタリングする必要があります。 – HLGEM

関連する問題