Поиск похожих записей с помощью SQL - PullRequest
1 голос
/ 11 августа 2010

У меня есть база данных SQL Server 2008 с 2 таблицами. Эти таблицы являются Адрес и Магазин. Эти таблицы определены как

Address
--------
ID (int)
Line1 (nvarchar(255))
PostalCode (nvarchar(5))
City (nvarchar(255))
State (nvarchar(255))

Store
-----
ID (int)
LocationID (int)
Name

Я пытаюсь найти список магазинов, расположенных по одному адресу по Line1 и PostalCode. Мне нужно игнорировать идентификатор из-за дубликатов записей. Я не забочусь о магазинах, которые являются единственным магазином в их местоположении. Скорее, я хочу только список магазинов, которые разделяют местоположение. К сожалению, я не уверен, как это сделать.

Как мне написать запрос, который будет возвращать только записи, которые группируются по адресу в одной строке1 и PostalCode?

Спасибо!

Ответы [ 3 ]

3 голосов
/ 11 августа 2010

Это то, что вы хотите?

SELECT t1.*, s.* FROM
(SELECT Line1 ,PostalCode
FROM Address
GROUP BY Line1 ,PostalCode
HAVING COUNT(*) >1) t2
JOIN Address t1 ON t2.Line1  = t2.Line1 
AND t1.PostalCode = t2.PostalCode
JOIN  Store s on t1.ID = s.LocationID
2 голосов
/ 11 августа 2010
select s.ID, s.LocationID, s.Name, a.ID, a.Line1, a.PostalCode
from (
    select Line1 + ', ' + PostalCode as Line1PostalCode
    from Address a
    inner join Store s on a.ID = s.LocationID
    group by Line1+ ', ' + PostalCode
    having count(*) > 1
) ag
inner join Address a on ag.Line1PostalCode = a.Line1+ ', ' + a.PostalCode
inner join Store s on a.ID = s.LocationID
0 голосов
/ 11 августа 2010

Этот запрос использует подзапрос, чтобы найти все адреса с более чем одним магазином, а затем использует его в качестве основы для выбора магазинов для показа.

WITH StoreAddress AS 
(
 SELECT * FROM Store s INNER JOIN Address a ON s.LocationID=a.LocationID
)
SELECT sa.* FROM StoreAddress sa INNER JOIN 
   (SELECT Line1, PostCode FROM StoreAddress
   GROUP BY Line1, PostCode
   HAVING Count(ID)>1) pairs 
ON pairs.Line1=sa.Line1 AND pairs.PostCode=sa.PostCode
ORDER BY sa.Line1, sa.PostCode

Запрос отсортирован по Line1 и PostCode, поэтому хранилища в одном месте отображаются вместе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...