2010-12-09 36 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