2 Stimmen

Unterscheiden oder gruppieren nach einigen Spalten, aber nicht nach anderen

Ich habe eine Ansicht, die ich versuche, mit etwas ähnlich wie DISTINCT auf einige Spalten zu filtern, aber nicht andere.

Ich habe eine solche Ansicht:

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

Ich muss alle diese Spalten abrufen, aber nach Nachname, Postleitzahl und Straße1 filtern. Jetzt kommt der lustige Teil: Der Filter ist willkürlich, d.h. es ist mir egal, welche der Duplikate verschwinden. Es handelt sich um eine Art Mailing, und die anderen Informationen werden nur verwendet, um bei Bedarf nach einer bestimmten Person zu suchen (ich habe keine Ahnung, warum). Mit einem der Datensätze können Sie also leicht die entfernten Datensätze herausfinden.

So wie es jetzt aussieht, versagt mein Sql-Fu und ich filtere in C#, was unglaublich langsam und ist so ziemlich ein foreach, das mit einer leeren Liste beginnt und die Zeile hinzufügt, wenn der kombinierte Nachname, die Postleitzahl und die Straße nicht in der Liste enthalten sind.

Ich habe das Gefühl, dass ich einen einfachen / grundlegenden Teil von SQL vermisse, den ich verstehen sollte.

4voto

Nitin Midha Punkte 2258

Die Lösung kann sein, dass wir die Spalte "Eindeutige Identifizierung" im Blick haben:

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]

Wenn kein Bezeichner in der Ansicht .......

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X