2012-08-31 42 views
1

我們在計算每個縣,每個州數據庫中的供應商數量時遇到了很多麻煩。希望有人能幫助我。將表匹配到適當的組

我有一個名爲供應商的表,列出供應商ID(關鍵)及其當前分配。

下一張表稱爲郵政編碼,我需要的列是郵政編碼,FIPS(這是美國各縣的代碼)和州。這僅僅是可能的狀態,郵政編碼和FIPS的列表

我的第三個表是vendoraddresses,其中列出了每個供應商的地址,但沒有一個縣或FIPS列,否則這將是很容易的。有麻煩

即時工作:這是通過廠商ID密鑰

最後的表是縣,其具有以行(12345 =縣名即)排列爲每個FIPS代碼縣名鏈接到供應商表所有這些表格一起準確計算每個州每個縣的供應商數量。我覺得這真的不應該那麼難,但我猜想我打了一個腦袋。以下是我到目前爲止,但它不是我所需要的。林想知道如果一個工會或類似的東西會是一個更好的選擇將所有這些表放在一起。

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 
一些幫助IVE

所以試圖使一些進展:

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) (varchar(50))

其他表vsae具有以下列,第1列= serviceareaid - 與上表相同,第2列= vendorid(數字id)列3 = description(描述服務區域的文本) fips =縣代碼(FK char(5))和郵政編碼(char (5))

對於一些更多的信息,每個服務都可以被稱爲「加利福尼亞州」或類似的那樣,然後系統具有每個州,然後縣,然後每個縣內的郵政編碼列出服務區,這我的問題大部分都是謊言,因爲我可以得到任何數量的縣郵政編碼,所以即時得到一個虛假的計數爲什麼我試圖做。

我的最終目標是找出每縣有多少供應商,而沒有考慮到一個縣的郵政編碼。

回答

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 

這就賦予郵政編碼到縣城裏的大人口。

+0

感謝您的幫助,郵政編碼表中的其他類型的信息是經度和緯度以及時區,不知道是否可以像上面顯示的那樣工作。我是潔具,我得到了不止一個縣的郵政編碼,但即時試圖只拉1縣/縣,會像在縣放MAX(郵政編碼)一樣簡單,你做的伎倆,你認爲?然後在查詢中正確使用它。僅列出每個縣的1個郵政編碼?即時通訊將嘗試這一點,併發布我的結果,如果即時通訊與它在某處。 – wondergoat77

+1

@ wondergoat77。 。 。是的,你可以使用MAX。但是,您需要的是每個郵政編碼的MAX(fips)。 –

+0

我編輯了我原來的帖子並添加了新的qeury。你可以看一下,讓我知道如果我的路是正確的,不知道我是否真的需要我使用或不使用的工會。包括一些新的表格,以及以上的表格 – wondergoat77