2012-08-31 4 views
1

우리 데이터베이스의 주당, 카운티 당 공급 업체의 수를 세는 데 많은 어려움이 있습니다. 누군가 나를 도울 수 있기를 바랬습니다.그룹을 적절히 그룹으로 묶기

나는 공급 업체 id (키)와 현재 할당을 나열하는 vendors라는 하나의 테이블을 가지고 있습니다.

다음 테이블을 우편 번호라고하며 여기에서 필요한 열은 우편 번호, FIPS (미국의 카운티 코드) 및 상태입니다. 이것은 가능한 상태, 우편 번호 및 fips의 목록입니다.

내 세 번째 테이블은 각 공급 업체의 주소를 나열하지만 county 또는 fips 열은 없거나 매우 쉽습니다.

IM 갖는 문제 작업 : 이것은 (12345 = 현 이름 IE) 열로 늘어선 각 FIPS 코드 군 이름이

최종 테이블 현 키이 VendorID 값을 통해 벤더 테이블에 연결된 각 주마다 카운티 당 공급 업체를 정확히 계산하기 위해이 모든 표를 함께 사용합니다. 나는 이것이 정말로 그렇게 열심히해서는 안되는 것처럼 느낀다. 그러나 나는 내가 추측하는 정신 블록을 쳤다. 아래는 내가 지금까지 가지고있는 것이지만, 내가 필요로하는 것이 아니다. 임은이 조합을 전부 얻는 더 나은 선택 일 것 인 경우에 조합 또는 무언가가 좋은지 생각해 보는 Im. 도움 필자 너무

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)을 (쿼리에서 약어를 사용하여) 다음과 같은 열이 (varchar (50))

다른 테이블 vsae에는 다음 열이 있습니다. serviceareaid - serviceareaid - 위 테이블과 동일하지만, fips = 카운티 코드 (FK char (5)) 및 우편 번호 (char (5))

그리고 각 서비스는 "california"또는 somehting이라고 불릴 수 있습니다. 시스템은 각 서비스 지역에 대해 나열된 각 카운티 내에 각 주, 카운티, 우편 번호를 갖습니다. 카운티마다 우편 번호를 가져올 수 있기 때문에 대부분의 내 문제가 거짓말입니다. 그래서 나는 무엇을하려고하는지 거짓 카운트를 얻습니다.

궁극적 인 목표는 카운티의 우편 번호를 고려하지 않고 카운티 수를 파악하는 것입니다.

답변

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 (을 PostalCode)에서 퍼팅처럼 간단 무언가를 할 노력하고 도자기를 무엇입니까? 그런 다음 쿼리에서 올바르게 사용하십시오. 카운티 당 우편 번호를 하나만 나열하면됩니까? 내가 그것을 시도하고 내 결과를 게시 메신저 어딘가에 그것을 가지고가는 경우. – wondergoat77

+1

@ wondergoat77. . . 예, MAX를 사용할 수 있습니다. 그러나 원하는 것은 우편 번호 당 MAX (fips)입니다. –

+0

ive 님이 내 원래 소식을 편집하고 새로운 qeury를 추가했습니다. 당신은 내 모습을 들려주고, 올바른 방향으로 나아가는 지 알 수 있습니까? 내가 사용하는 노조가 정말로 필요한지 확실하지 않습니다. ive는 위에서 끌어 당길 수있는 몇 가지 새로운 테이블을 포함 시켰습니다. – wondergoat77

관련 문제