none
Distinct über mehrere Felder RRS feed

  • Frage

  • Hallo Forum.

    ich möchte eine Tabelle nach einem eindeutigen Inhalt filtern der sich aus mehreren Feldern zusammensetzt und alle (!) gewünschten Felder als ergebins erhalten. Die Eindeutigkeit ergibt sich aus.

    Feld1, Feld2, Feld3

    dazu gibt es in der Tabelle aber mehrere Datensätze - ich benötige aber nur jeweils einen Datensatz der der Identifikation dient, jedoch auch alle weiteren Felder der Tabelle.

    Beispiel: Die Felder seien wie folgt:

    Feld1= Postleitzahl, Feld2=Straße, Feld3=Hausnummer, Feld4=Name des Bewohners1, ...

    Feld1= Postleitzahl, Feld2=Straße, Feld3=Hausnummer, Feld4=Name des Bewohners2, ...

    Feld1= Postleitzahl, Feld2=Straße, Feld3=Hausnummer, Feld4=Name des BewohnersN, ...

    Ich möchte aber nur ein einziges Mal einen Datensatz erhalten für Postleitzahl, Straße und Bewohner....

    ... verzweifel...

    Danke für den Support

    Gruß

    Heiko

    Donnerstag, 25. Juli 2013 17:09

Alle Antworten

  • Hallo Heiko,

    SELECT   Feld1,
             Feld2,
             Feld3,
             MIN( Feld4 ) AS Min_Feld4,
             MIN( Feld5 ) AS Min_Feld5
    FROM   Tabelle
    GROUP BY Feld1,
             Feld2,
             Feld3
    

    Beachte aber, dass hierbei keine gezielte Auswahl der Werte der anderen Spalten erfolgen kann (außer halt MIN oder MAX). Zudem müssen die dabei ermittelten Werte nicht zwingend aus einem Datensatz stammen. Min_Feld4 könnte also bspw. den Wert des dritten Datensatzes der Gruppe enthalten, Min_Feld5 den Wert des 20. Datensatzes der Gruppe.

    Wenn Du das anders benötigst, poste bitte mal deine Tabellenstruktur (wenn machbar, als CREATE TABLE Statement) sowie einige Beispieldaten (auch hier wäre es schön, wenn Du die als INSERT Statements liefern könntest. Dazu dann bitte das gewünschte Ergebnis anhand der Beispieldaten.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    • Als Antwort vorgeschlagen Uwe RickenMVP Freitag, 26. Juli 2013 05:10
    Donnerstag, 25. Juli 2013 17:35
    Moderator
  • Alternativ geht es mit einer CTE und Window Function recht elegant:

    With NumberedRows as
    (Select Feld1, Feld2, Feld3, Feld4, Feld5, ROW_NUMBER() OVER(PARTITION BY Feld1, Feld2, Feld3) rn
    from Tabelle
    )
    Select Feld1, Feld2, Feld3, Feld4, Feld5
    from NumberedRows 
    where rn=1
    order by 1,2,3;
    


    Einen schönen Tag noch,
    Christoph Muthmann
    Microsoft SQL Server MVP - Blog

    Freitag, 26. Juli 2013 11:44