2010-04-01 2 views
2

У меня есть представление, что я пытаюсь фильтровать что-то похожее на 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-Фу подводит меня, и я фильтрация в C#, который невероятно медленно и является в значительной степени Еогеаспа, который начинается с пустым списком и добавляет строку в том случае, если в сочетании фамилий , zip и street нет в списке.

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

+0

У вас есть первичный ключ или уникальную идентификацию запись в поле зрения? –

ответ

4

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

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] 

Когда нет Identifier в ....... View

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 
+0

В этом есть трудность - у нас нет уникального идентификатора. :( –

+0

Спасибо, ваши ответы на это ответил! –

+0

Ты качаешь, спасибо. – FatalMojo

Смежные вопросы