2016-10-13 50 views
0

我在SQL查詢設計如下圖所示:SQL - 選擇列值,如果其他值不存在

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

我想在C列「第一」返回所有行,行以「二「只有當它不具有相應的‘基於A列第一’的值,所以我想看看:

Mary 24 
Paul 5 
Tim 1 

我試過的case語句和if語句,但不能讓它開始工作。有什麼建議麼?

回答

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 

一招按字母順序FS這樣的行數1將被分配到First之前。如果First不存在,則1將被分配給Second

+0

這完美的作品。謝謝! – thuetten

0

一個簡單的答案是使用NOT IN。

所以,這採取一切人,當列C =第一或C =其次,他們有沒有其他occurence與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

相關問題