У меня есть таблица с именем TempAllAddresses
со следующими столбцами - ID
, Address
, State
. Я хочу заполнить новую таблицу Address
, State
и Count
. Count
должно отображать, сколько записей в таблице TempAllAddresses имеется адрес, подобный этому адресу, за которым следует подстановочный знак. Если это не имеет смысла, вот пример для иллюстрации -
Допустим, у меня есть такая запись:
ID Address State
12345 13 Phoenix NY
Я хочу вставить новую запись в новую таблицу с именем AddressCount
, в которой 13 Фениксов для Address
, NY для State
и количество записей в таблице, в которых NY равно штат и адрес как "13 Феникс%" для Count
.
Я хочу сделать это внутренним соединением TempAllAddresses. Это то, что я пытался, но, похоже, не достиг того, что я искал:
SELECT t1.Address, t1.State, COUNT(t2.address) As NumEntities
FROM TempAllAddresses t1
INNER JOIN TempAllAddresses t2
ON t1.state = t2.state
AND T2.Address LIKE t1.address + '%'
GROUP BY t1.State, t1.Address
Граф точно выключен. Это должно быть эквивалентно выполнению "SELECT COUNT(*) FROM TempAllAddresses WHERE State=thisRecordsState and Address LIKE thisRecordsAddress + '%'
". Как я могу сделать это? Что я делаю не так?
Edit:
Счет, кажется, выключен следующим образом -
Если у меня есть запись, как я упоминал выше, а затем у меня есть две другие записи, которые также имеют штат Нью-Йорк, а затем имеют адреса «13 Phoenix Road» и «13 Phoenix Rd», то я хочу попасть в свой финал Таблица записи, как это:
13 Phoenix NY 3
Вместо этого я, кажется, получаю:
13 Phoenix NY 9
Я не совсем уверен, что здесь происходит ... какой-то декартово произведение? Перестановки ...? Кто-нибудь может объяснить это?
Редактировать 2:
Дальнейшее редактирование, так как мне кажется, что меня неправильно поняли (и мне действительно нужно решение :() ... Вот запрос с коррелированным подвыбором, который выполняет то, что я ищу. Я хотел бы сделать то же самое с внутренним объединение таблицы на себя, а не на подвыбор.
SELECT Address, State,
(SELECT Count(*)
FROM TempAllAddresses innerQry
WHERE innerQry.address LIKE outerQry.address + '%'
AND innerQry.state = outerQry.state) As NumEntities
FROM TempAllAddresses outerQry
Как правило, для каждой записи я хочу получить количество записей в таблице, имеющих одинаковое состояние, и адрес, начинающийся с этого адреса (или равный ... Я хочу включить этот адрес как часть счета).