2012-06-15 45 views
1

我有一個表的IDMS SQL查詢,以顯示最大重複列

 
tblDiseaseTrack 

TrackID DiseaseID PostalCode 
1  3   111 
2  3   111 
3  2   111 
4  1   222 
5  2   222 
6  4   111 
7  1   222 
8  5   333 
9  5   333 
10  5   333 

我想要寫一個查詢,顯示該疾病id和最大重複DiseaseId的每個郵遞區號郵政編碼如下,

 
DiseaseID PostalCode 
3   111 
1   222 
5   333 

請任何幫助將不勝感激。我想evrything和無法找到任何help..Thank你再次:)

回答

2
select diseaseid, postalcode 
from 
(
    select 
     postalcode, 
     diseaseid, 
     row_number() over (partition by postalcode order by count desc) as row 
    from 
    (
     select postalcode, count(postalcode) as count, diseaseid 
     from tblDiseaseTrack 
     group by postalcode, diseaseid 
    ) as T1 
) as T2 
where row = 1 
order by postalcode 

這將返回你想要什麼:

DiseaseID PostalCode 
3   111 
1   222 
5   333 

編輯:

像同一查詢上面,但加入從第二個表中獲取城市名稱:

select diseaseid, T2.postalcode, city 
from 
(
    select 
     postalcode, 
     diseaseid, 
     row_number() over (partition by postalcode order by count desc) as row 
    from 
    (
     select postalcode, count(postalcode) as count, diseaseid 
     from @tblDiseaseTrack 
     group by postalcode, diseaseid 
    ) as T1 
) as T2 
inner join tblcity on T2.postalcode = tblcity.postalcode 
where row = 1 
order by postalcode 

請注意,我在城市表中使用了相同的列名PostalCode,所以我必須在最外面的查詢中加上PostalCode的前綴:T2.postalcode而不是postalcode

否則查詢將與消息崩潰:

不明確的列名「郵編」

...因爲SQL Server不知道,我想這兩個PostalCodes的。

+0

maaan ...謝謝你的答案!是的,它確實給了我想要的東西..再次感謝你:) –

+0

希望我不打擾,我可以知道,我如何應用內部連接這個SQL查詢:),我需要得到的城市名稱出來tblCity根據postalCode在結果中顯示:)提前致謝 –

+0

@hh_shan:查看我的回答! –