我在计算我们数据库中每个县、每个州的供应商数量时遇到了很多麻烦。希望有人可以帮助我。
我有一张名为供应商的表,其中列出了供应商 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))
对于更多信息,每个服务都可以称为“加利福尼亚”或类似的名称,然后系统会列出每个州,然后是县,然后是每个县内为服务区域列出的邮政编码,这就是我的大部分问题所在因为我可以得到每个县的任意数量的邮政编码,所以我对我试图做的事情进行了错误的计数。
我的最终目标是在不考虑一个县的邮政编码的情况下找出每个县有多少供应商。