2012-03-02 17 views
0

表設計一個姓氏抓取所有行:SQL查詢幫助:用相同的名字和匹配定義列表

First_Name Last_name 

有幾個記錄具有相同的名字,但不同姓。我需要找到所有具有相同名字和定義的姓氏列表的記錄。

例如:

First_Name Last_name 
John  Pohn 
John  Qohn 
John  Rohn 
Jack  Rohn 
Jack  Pohn 
Sam  Pohn 
Sam  Rohn 
Sam  Qohn 

姓名單:Pohn和Qohn

因此,我的查詢應該只挑選這些記錄

John Pohn 
John Qohn 
Sam Pohn 
Sam Qohn 
+1

向我們顯示您的查詢 – alfasin 2012-03-02 22:17:37

+0

@Justin您的編輯完全改變了問題......我不認爲這是好奇的意思,我認爲他想用姓氏找到所有「約翰」* ohn – alfasin 2012-03-02 22:33:51

+3

@alfasin - 你是什麼意思?賈斯汀只是格式化了那裏已經存在的東西,沒有其他改變? – 2012-03-02 22:38:45

回答

3

很難挺告訴你想要的這裏 - DO意味着對於任何出現不止一次的名字,你想顯示所有匹配記錄的名字和姓氏?如果是這樣你可以使用的解析函數,是這樣的:

select first_name, last_name 
from (
    select first_name, last_name, 
     count() over (partition by first_name) as cnt 
) 
where cnt > 1; 

內部查詢增加了一個虛擬列到每個顯示的第一個名字多少次出現在整個數據集行;外部查詢然後過濾掉只出現一次的任何內容。一般來說,這比自我加入要好,因爲你只有一次擊中表格。

如果您只對特定的姓氏感興趣,您可以在這兩個級別中添加一個過濾器(根據DCookie的答案),結果稍有不同 - 取決於您希望計數中包含的所有姓氏,還是僅限於所有姓氏列表中的具體內容。


當然,如果這是家庭作業,你剛剛被學習自我加入,這可能是你應該去現在的方式 - 雖然我不教的東西次優的粉絲,除非它是爲了告訴你爲什麼是這樣。如果是作業,看看你能得到多遠,然後將你的嘗試和任何錯誤等添加到問題中。

+0

比我更好的答案;-) – DCookie 2012-03-02 23:12:45