2010-12-09 34 views
0

我有一个SQL表AddressCount有3个字段:addressstatenumEntities。我想要做的是获得每个地址+状态组合基于类似的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应该工作。

2

你只需要添加

GROUP BY t1.Address, t1.State 

...在你的第二个查询结束。只是用PostgreSQL做了一个快速测试,并且将LIKE和GROUP BY结合起来就像预期的那样工作,所以我认为没有理由不适合你的情况。

+0

我不通过确切的地址,想组,我想按类似的东西地址...... – froadie 2010-12-09 09:38:22

+0

但是你通过精确t2.address不群 - 只有通过精确t1.address,这是你的定义已经确切。 – Arvo 2010-12-09 09:43:02

0

可能:
SELECT x.state,x.address,SUM(x.NumEntities)
FROM(SELECT * FROM AddressCount WHERE地址LIKE%)×
GROUP BY x.state

0

莫非你试试这个?

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