Как я могу сложить столбец на основе как? - PullRequest
0 голосов
/ 09 декабря 2010

У меня есть таблица SQL AddressCount, которая имеет 3 поля: address, state и numEntities.То, что я хочу сделать, это получить сумму 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, я хочу получить сумму numEntities для всех строк, которые имеют состояние NJ, и адрес, такой как «% 25 Courtland Rd%».Я бы хотел иметь возможность сделать это с помощью 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 + '%'

Это, кажется, не работает, хотя ... любая идея, как я могувыполнить это?

Ответы [ 4 ]

3 голосов
/ 09 декабря 2010

Если я вас правильно понимаю, добавление GROUP BY t1.state, t1.address должно сработать.

2 голосов
/ 09 декабря 2010

Вам просто нужно добавить

GROUP BY t1.Address, t1.State

... в конце вашего второго запроса.Только что провел быстрый тест с PostgreSQL и скомбинировал LIKE и GROUP BY, как и ожидалось, поэтому я не вижу причин, по которым это не следует делать в вашем случае.

0 голосов
/ 09 декабря 2010

Не могли бы вы попробовать это?

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
0 голосов
/ 09 декабря 2010

может быть:
SELECT x.state, x.address, SUM (x.NumEntities)
FROM (ВЫБРАТЬ * ОТ AddressCount, ГДЕ адрес НРАВИТСЯ%) x
GROUP BY x.state

...