私たちのデータベースで郡ごと、州ごとにベンダーの数を数えるのは大変です。誰かが私を助けてくれることを望んでいました。
ベンダー 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))
さらに詳しい情報については、各サービスを「カリフォルニア」またはそのようなものと呼ぶことができます。システムには、各州、次に郡、次に各郡内の郵便番号がサービスエリアにリストされています。これが私の問題のほとんどが横たわっている場所です。郡ごとに任意の数の郵便番号を取得できるため、何をしようとしているのかについて誤ったカウントを取得しています。
私の最終的な目標は、郡の郵便番号を考慮せずに、郡ごとにベンダーの数を調べることです。