2010-12-09 2 views
0

address, statenumEntities의 세 필드가있는 AddressCount SQL 테이블이 있습니다. 내가하고 싶은 일은 각 주소에 대해 numEntities + 상태 조합을 취하는 것입니다. 이 설명하기 다소 어렵지만, 나는 다음과 같은 상관 관계 쿼리 내가 달성하기 위해 노력하고있어 제대로 나타냅니다 생각 :같은 항목을 기반으로 열을 합계하려면 어떻게합니까?

SELECT Address, State, 
    (SELECT SUM(NumEntities) 
    FROM AddressCount innerQry 
    WHERE innerQry.address LIKE '%' + outerQry.address + '%' 
     AND innerQry.state = outerQry.state) As NumEntities 
FROM AddressCount outerQry 

는 기본적으로,이 주소, 상태가있는 테이블로 끝내고 싶어하고, 와일드 카드로 둘러싸인 해당 주소와 같은 모든 주소에 대한 numEntities의 합계입니다. 따라서 주소가 "25 Courtland Rd"이고 주가 NJ 인 경우 상태가 NJ이고 주소가 '% 25 Courtland Rd %'인 모든 행에 대해 numEntities의 합계를 가져 오려고합니다. GROUP BY LIKE로이 작업을 수행하고 싶지만 SQL로는 가능하지 않다고 생각합니다.

SELECT address, state, sum(numEntities) 
FROM AddressCount 
GROUP BY (LIKE '%' + address + '%') 

제가 위에서 게시 한 상관 관계 쿼리 SQL 문이 정확한 것 같다,하지만 난 가능하면 내부에 의해, 같은 일을 수행하고 싶습니다

에 테이블의 조인 기본 개념은 이런 식으로 뭔가를 달성하는 것입니다 그 자체. 나는 최근에 LIKE 표현에 테이블을 조인 할 수 있다는 읽기, 그래서 나는 다음과 같이 수행 할 :

SELECT t1.Address, t1.State, SUM(t2.NumEntities) 
FROM AddressCount t1 
INNER JOIN AddressCount t2 
    ON t1.state = t2.state 
    AND t2.address LIKE '%' + t1.address + '%' 

이 보이지 않는 것은 일을하지만 ... 어떤 생각 나는이 작업을 수행 할 수있는 방법을 ?

답변

3

정확하게 이해하면 GROUP BY t1.state, t1.address을 추가해야합니다.

+0

정확한 주소로 그룹화하고 싶지 않습니다. 그 주소와 비슷한 그룹으로 그룹화하고 싶습니다 ... – froadie

+0

여기에 무슨 일이 일어날 지 생각합니다. 적어도 내가 상상 한 것 (그리고 제이 섹은 분명히 :)). 같은 그룹에 속한다고 생각할만한 주소의 예를 몇 가지 제시 할 수 있습니까? –

+0

저는 여기에 어떤 일이 일어 났는지 확신합니다 : 뉴저지 주에있는 모든 세 줄과 각각 numEntities 1, 2, 4를 사용하면 결과 행 '25 Courtland Road - NJ-7'을 얻을 수 있습니다. 제 생각에 당신이 inner 대신에 left join을 사용한다면, 당신은 또한 얻을 것입니다 :'25 Courtland Road Apt. 34 - 뉴저지 - 0'과 '웨스트 25 코트 랜드로드 - 뉴저지 - 0'. –

2

당신은 당신의 두 번째 쿼리의 말에

GROUP BY t1.Address, t1.State 

...를 추가해야합니다. 그냥 PostgreSQL을 사용하여 빠른 테스트를 수행하고 LIKE 및 GROUP BY를 예상대로 작동하므로 사용자의 경우에는 아무런 이유가 없습니다.

+0

, 나는 그 주소 ... – froadie

+0

LIKE 아무것도에 의해 그룹화 할하지만 당신은 정확한 t2.address에 의해 그룹화하지 않음 그것은 당신의 정의에 의해 이미 정확한 것입니다. – Arvo

0

어쩌면 :
SELECT x.state, x.address, SUM (x.NumEntities) FROM
(SELECT * % LIKE 주소가 AddressCount에서) x.state에 의해
그룹을 X

0

당신이 할 수 이거 한번 해봐? 만 정확한 t1.address에 의해 -

SELECT a.Address,t.State,t.numEntities 
FROM 
    dbo.AddressCount a, 
     (SELECT  State,SUM([Count]) as numEntities 
     FROM dbo.AddressCount 
     WHERE Address LIKE '%+address+%' 
     GROUP BY State) t 
WHERE a.State = t.State 
나는 정확한 주소 그룹에 원하지 않는
관련 문제