1

私たちのデータベースで郡ごと、州ごとにベンダーの数を数えるのは大変です。誰かが私を助けてくれることを望んでいました。

ベンダー ID (キー) とその現在の割り当てを一覧表示する vendors というテーブルがあります。

次のテーブルは郵便番号と呼ばれ、必要な列は郵便番号、FIPS (これは米国の郡のコードです)、および州です。これは、可能な州、郵便番号、および FIPS の単なるリストです。

私の 3 番目のテーブルは vendoraddresses です。これは各ベンダーの住所をリストしますが、county または fips の列がありません。そうでなければ、これは非常に簡単です。これは vendorid キーを介してベンダー テーブルにリンクされています。

最後のテーブルは郡で、各 fips コードの郡名が行に並んでいます (例: 12345 = 郡名)

これらのテーブルをすべて一緒に操作して、州ごとの郡ごとのベンダーを正確にカウントするのに苦労しています。これはそれほど難しくないはずだと思うのですが、メンタルブロックにぶつかったと思います。以下は私がこれまでに持っているものですが、必要なものではありません。これらすべてのテーブルをまとめるには、ユニオンまたはそのようなものがより良い選択であるかどうか疑問に思っています。

SELECT

va.state
,pc.fips
,count(v.vendorid) as vendors


FROM 
Vendors v
join vendoraddresses va on va.vendorid = v.vendorid
join postalcodes pc on pc.postalcode = va.postalcode
group by va.state, fips
order by va.state, fips

それで、いくつかの助けを借りて、私はいくつかの進歩を遂げようとしました:

SELECT 
State1
,County
,COUNT(Vendor) as Vendors
FROM
(
SELECT
c.name as County, pc.State as State1, v.VendorID as Vendor
FROM 
Vendors v
join vendorserviceareas vsa on vsa.vendorid = v.vendorid
join vendorserviceareaentries vsae on vsae.vendorserviceareaid =     vsa.vendorserviceareaid 
join counties c on c.fips = vsae.fips
join postalcodes pc on pc.fips = c.fips

union 

select c.name as county, s.name as state1, vsa.Vendorid as Vendor from states s
join counties c on c.fips = s.fips
join vendorserviceareaentries vsae on vsae.fips = c.fips
join vendorserviceareas vsa on vsae.vendorserviceareaid = vsa.vendorserviceareaid 


)a
GROUP BY State1, County
Order BY State1, County

私が追加した追加のテーブルには、次の列があります (クエリの略語を使用) vsa 列 1 = serviceareaid (数値 ID)、列 2 = vendorid (数値 ID) 列 3 = 説明 (サービスの領域を説明するテキスト) (varchar(50 )))

もう 1 つのテーブル vsae には次の列があります。列 1 = serviceareaid - 上記の表と同じ、fips = 郡コード (FK char (5))、および郵便番号 (char (5))

さらに詳しい情報については、各サービスを「カリフォルニア」またはそのようなものと呼ぶことができます。システムには、各州、次に郡、次に各郡内の郵便番号がサービスエリアにリストされています。これが私の問題のほとんどが横たわっている場所です。郡ごとに任意の数の郵便番号を取得できるため、何をしようとしているのかについて誤ったカウントを取得しています。

私の最終的な目標は、郡の郵便番号を考慮せずに、郡ごとにベンダーの数を調べることです。

4

1 に答える 1

2

あなたが抱えている問題は、郵便番号が複数の郡にある可能性があることだと思います。これは、クエリを実行して確認できます。

select pc.fips, pc.postalcode, count(*)
from postalcodes pc
group by pc.fips, pc.postalcode
having count(*) > 1
order by 3 desc

これにより、重複のリストが表示されます。州にまたがる郵便番号もあります。

郡に郵便番号を割り当てる必要があります。郵便番号と郡の交差点の人口など、他の情報がある場合は、次のような方法を試すことができます。

from (select pc.*
      from (select pc.*, row_number() over (partition by postal_code order by pop desc) as seqnum
            from postalcodes pc
           ) pc
      where seqnum = 1
     ) pc

これにより、人口の多い郡の郵便番号が割り当てられます。

于 2012-08-31T17:11:10.077 に答える