2016-10-13 8 views
0

ない場合、私は以下のように設計されたSQLでクエリを持っている列の値を選択します。SQL - 他の値が存在し

Column A Column B Column C 
Mary    24    First 
Mary    25    Second 
Paul    5    First 
Tim    1    Second 

私はセカンド」でカラムC、および行の「第1」ですべての行を返すようにしたいです「それは対応していない場合にのみ、 『列Aに基づく第一』の値は、だから私は見てみたい:

Mary 24 
Paul 5 
Tim 1 

私はcase文を試してみましたが、文の場合、それは動作させることはできませんしました。助言がありますか?ここ

答えて

8

ROW_NUMBER

SELECT * FROM 
(
SELECT * , ROW_NUMBER()OVER(PARTITION BY [Column A] ORDER BY [Column C] ASC) RN 
FROM TableName 
) A 
WHERE RN = 1 

を使用して1つのトリックは、アルファベット順FS前に来ているので、行番号1Firstに割り当てられます。 Firstが存在しない場合、1Second

+0

これは完全に機能します。ありがとうございます! – thuetten

0

に割り当てられます。簡単な答えはNOT INを使用することです。列C =第一又はC =第二に、彼らはFIRSTと、他の発生を持っていないときに

だから、これは私はそれが速度の点で効率的だろうか分からないけど)

SELECT [Column A], [Column B] 
FROM tableName 
WHERE [Column C] = 'First' 
OR 
([Column C] = 'Second' 
AND [Column A] NOT IN (
    SELECT DISTINCT [Column A] 
    FROM tableName 
    WHERE [Column C] = 'First')) 

をすべての人々を取りますそれは理解しやすいです。

私は間違いをした場合、今はテストできませんので、ご意見ください。

+0

あなたは正しいですが、これはうまくいって完全に意味があります。しかし、それを実行するにはかなりの時間がかかりました。ありがとう! – thuetten

関連する問題