Различаются или группируются по одним столбцам, но не по другим - PullRequest
2 голосов
/ 01 апреля 2010

Мне кажется, что я пытаюсь фильтровать что-то похожее на DISTINCT в некоторых столбцах, но не в других.

У меня есть такой вид:

Name
LastName
Zip
Street1
HouseholdID (may not be unique because it may have multiple addresses -- think of it in the logical sense as grouping persons but not physical locations; If you lookup HouseholdID 4130, you may get two rows.. or more, because the person may have mutiple mailing locations)
City
State

Мне нужно вытащить все эти столбцы, но отфильтровать по LastName, Zip и Street1. Вот забавная часть: фильтр произвольный - это значит, что мне все равно, какой из дубликатов пропадет. Это относится к типу рассылки, а другая информация не используется ни по какой другой причине, кроме как для поиска конкретного человека, если это необходимо (я понятия не имею, почему). Итак ... по одной из записей вы легко сможете найти удаленные.

В моем нынешнем виде мой Sql-Fu не работает, и я фильтрую в C #, который невероятно медленен и в значительной степени является foreach, который начинается с пустого списка и добавляет строку в объединенные фамилия, почтовый индекс и улица не указаны в списке.

Мне кажется, что мне не хватает простой / базовой части SQL, которую я должен понимать.

1 Ответ

4 голосов
/ 01 апреля 2010

Решение может предполагать, что мы видим столбец уникальной идентификации:

Select Name,
       LastName,
       Zip,
       Street1,
       HouseholdID, 
       City,
       State

From View V1

INNER JOIN 
(
    Select Min([Unique Identification]) as ID
    From View v
    Group By LastName,
             Zip,
             Street ) AS T on T.ID = V1.[Unique Identification]

Когда нет идентификатора в поле зрения .......

Select     Name,
           LastName,
           Zip,
           Street1,
           HouseholdID, 
           City,
           State

    From  
    (
        Select Name,
               LastName,
               Zip,
               Street1,
               HouseholdID, 
               City,
               State,
               Row_Number() Over (Partition By LastName,Zip,Street Order By Street1,HouseholdID,City,State) AS RowNum
        From View v
        ) AS T 
Where T.RowNum = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...