1

我在计算我们数据库中每个县、每个州的供应商数量时遇到了很多麻烦。希望有人可以帮助我。

我有一张名为供应商的表,其中列出了供应商 ID(键)及其当前分配。

下一个表称为邮政编码,我需要的列是邮政编码、FIPS(这是美国县的代码)和州。这只是可能的州、邮政编码和 fips 的列表

我的第三个表是 vendoraddresses,它列出了每个供应商的地址,但没有县或 fips 列,否则这将非常容易。这通过 vendorid 键链接到供应商表

最终表格是counties,其中每个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 ))

另一个表 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 回答