1

私はテーブルを持っています

tblDiseaseTrack

TrackID 疾病 ID 郵便番号
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

次のように、各郵便番号の最大繰り返し DiseaseId の疾患 ID と郵便番号を表示するクエリを記述します。

疾病 ID 郵便番号
3 111
1 222
5 333

どんな助けでも大歓迎です。私はすべてを試してみましたが、助けが見つかりませんでした..ありがとうございました:)

4

1 に答える 1

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

編集:

上記と同じクエリですが、JOIN を使用して 2 番目のテーブルから都市名を取得します。

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市区町村テーブルでも同じ列名を使用したことに注意してT2.postalcodeくださいpostalcode

そうしないと、クエリが次のメッセージでクラッシュします。

あいまいな列名「郵便番号」

...SQL Server は、2 つの PostalCodes のどちらが必要かを認識できないためです。

于 2012-06-15T16:45:54.403 に答える