Office: (Office 2003) SELECT DISTINCT nur auf Feld und nicht Row

Helfe beim Thema SELECT DISTINCT nur auf Feld und nicht Row in Microsoft Access Hilfe um das Problem gemeinsam zu lösen; Hallo, ich möchte von Feld X nur die Unikate auswählen. Allerdings können sich diese in den anderen Feldern unterscheiden. In Accesss mit einem select... Dieses Thema im Forum "Microsoft Access Hilfe" wurde erstellt von Perfectdark, 5. September 2009.

  1. SELECT DISTINCT nur auf Feld und nicht Row


    Hallo,

    ich möchte von Feld X nur die Unikate auswählen. Allerdings können sich diese in den anderen Feldern unterscheiden. In Accesss mit einem select distinct scheint das nicht zu gehen, es werden nur identische Einträge (rows) ignoriert aber nicht solche, die sich in anderen feldern unterscheiden. Wie kann ich das erreichen?

    :)
     
    Perfectdark, 5. September 2009
    #1
  2. Klar geht das:
    SELECT DISTINCT Feld FROM Tabelleoder auch
    SELECT Feld FROM Tabelle GROUP BY Feld
    was das gleiche ergibt.
    Ob die Datensätze dann in den nichtgewählten Felder gleich oder unterschiedlich sind, ist dann egal.
     
    Atrus2711, 6. September 2009
    #2
  3. So geht es schon, aber nicht, wenn ich die anderen Felder auch angezeigt haben will.
    (was ich nicht erwähnt habe in dem ersten post, oops)

    SELECT DISTINCT Feld1, Feld2 FROM Tabelle

    wo einträge in Feld1 nur einmal vorkommen sollten.

    Es sind dann zwar durchaus weniger records, aber es hat immer noch duplikate in Feld 1.

    BSP:

    SELECT DISTINCT Feld1, Feld2 FROM Tabelle ca 9700 records

    SELECT DISTINCT Feld1, FROM Tabelle ca 9400 records

    SELECT Feld1, Feld2 FROM Tabelle ca. 10000 records
     
    Perfectdark, 6. September 2009
    #3
  4. SELECT DISTINCT nur auf Feld und nicht Row

    Denkfehler.
    DISTINCT liefert die vorkommenden Werte im Feld; wenn meherere Felder genannt sind, die vorkommenden Wertkombinationen.

    Es ist also ganz klar, dass ein DISTINCT auf ein Feld tendenziell weniger Sätze liefert als ein DISTINCT auf zwei Felder. Es gibt ja dann mehr mögliche Kombinationen. Die Ergebnisse sind nur dann gleich zahlreich, wenn das zweite Feld immer den gleichen Wert hat.

    Es ist mit DISTINCT nicht "in einem Rutsch" möglich, zu diesen Werten noch irgendwelche Zusatzinfos zu bekommen. Aber du kannst eine DISTINCT-Abfrage durchaus als "Suchkriterium" nutzen, um zu den dort ermittelnten Werten - quasi die "Wunschliste" - passende Zusatzangaben zu bekommen. Erstelle die DISTINCT-Abfrage so, dass sie nur die Felder liefert, die als Suchkriterium gelten sollen. Speichere diese Abfrage als qrySuche. Eine neue Abfrage kann dann auf dieser qrySuche basieren und die dort isolierten "Trefer-IDs" mit weiteren Angaben anreichern; dabei kannst du qrySuche wie eine Tabelle verwenden und sie daher mit anderen Tabellen verjoinen - z.B. der Quelltabelle, auf der qrySuche selbst basiert.
     
    Atrus2711, 6. September 2009
    #4
  5. Das habe ich schon probiert nur erfolglos. KA, ob ich irgendeine "Denklücke" habe.

    Es handelt sich um genau 1 Feld, wo ich die Duplikate eliminieren will.

    Wenn ich jetzt diesen "unique-Query"

    SELECT DISTINCT feld1 FROM tabelle

    wieder mit den Daten der anderen feldern "joinen" will, ist das resultat identisch zu

    SELECT DISTINCT feld1, feld2 FROM tabelle

    völlig logisch.
    (join über feld1)
     
    Perfectdark, 6. September 2009
    #5
  6. Ja und, was hast du erwartet, wenn du keine Kriterien im DISTINCT verwendest?
    Was willst du denn eigentlich erreichen?
     
    Atrus2711, 6. September 2009
    #6
  7. Also um jetzt mal abzuschweifen:

    Ich brauche Access für dies hier nur als tool und nicht als produktive Datenbank-Anwendung. Ich habe ein Excel file mit gegen 20 worksheets mit daten in der tabelle. Duplikate suchen und so ist in access halt viel leichter als in Excel.

    Item diese excel sheets waren halt ein chaos und da hat es tonnenweise doppelte einträge, wo zum teil gewisse (nicht wirklich wichtige aber "nice to have" legacy-Daten) vorhanden sind und beim duplikat (oder triplikat oder ...) dann nicht mehr.

    Nun will ich die doppelten (bzw. bis zu 9-fach vorhandenen) einträge eliminieren.
    Das einzige kriterium
    dabei ist, dass der eintrag doppelt oder öfters vorhanden ist, eg es gibt keine anderen Kriterien.

    EDIT:

    Bsp:
    Code:
    Ich will jetzt den Eintrag "2" in Feld1 nur 1 mal haben und am besten mit dem dazugehörenden wert "z".
     
    Zuletzt von einem Moderator bearbeitet: 7. Januar 2021
    Perfectdark, 7. September 2009
    #7
  8. SELECT DISTINCT nur auf Feld und nicht Row

    Das dachte ich mir ja.

    Aber um mal ein Beispiel zu zeigen:

    Code:
    Wenn du hier nach Nachname und Vorname distinctest, gibt es insgesamt 3 einzigartige Werte (den Meier Kurt gibts ja zweimal, aber in gleicher Kombination). Wenn du diese 3 Werte jetzt mit der Urtabelle verbindest, wird der Join jeden gesuchten Wert finden. Also auch die beiden (!) Meier Kurts. Das liegt einfach am Join: er sucht Gleiches.

    Wenn du nur die 3 eindeutigen Werte haben willst, müssen die beiden Meier Kurts irgendwie zu einem "verdichtet" werden. Du könntest also z.B. die Max(ID) der gefundenen Treffer bilden. Das sind dann die IDs der Sätze, die "überleben" müssen. Alle anderen IDs kannst du wegwerfen.

    Dass es durchaus mehrere Meier Kurts geben kann, weißt du?
     
    Atrus2711, 7. September 2009
    #8
  9. Genau, nur wie?
    überleben müsste der treffer, der einen wert in feld2 hat. Allerdings ist es auch möglich, dass beide oder alle mehrfach vorhandenen Sätze in feld2 nichts (null) haben.
     
    Zuletzt von einem Moderator bearbeitet: 7. Januar 2021
    Perfectdark, 7. September 2009
    #9
  10. siehe #8. Access holt dir gerne die kleinste oder größte ID, aber Access wird nicht willkürlich einen auswählen.

    Versuch:
    Code:
    prüffeld ist dabei das Feld in Tabelle, das als Zusatzbedingung nicht leer sein darf. Wer da nicht gefunden wird, hat keine nichtleeren Werte, da gibts dann auch nicht szu übernehmen.
     
    Atrus2711, 7. September 2009
    #10
  11. Mit Bezug auf deinen Edit in #7:
    Dann halt:
    Code:
     
    Atrus2711, 7. September 2009
    #11
  12. Wie gesagt, es kann auch solche Einträge haben wo feld2 auch beim duplikat null ist oder auch einzelwerte, wo das der fall ist.
     
    Zuletzt von einem Moderator bearbeitet: 7. Januar 2021
    Perfectdark, 7. September 2009
    #12
  13. SELECT DISTINCT nur auf Feld und nicht Row

    Und was soll dann passieren? Access wird keine Werte erfinden. Was würdest du denn da haben wollen?!

    Access liefert für jeden vorkommenden Feld1-Wert das Maximum der Werte, die nicht leer sind. Feld1-Werte, deren feld2 immer leer ist, kommen nicht raus, weil die die WHERE-Klausel nicht erfüllen. Nach denen müsste man ggf separat suchen.

    Ob aber nun 1,2 oder 9 Werte für Feld2 vorkommen, ist egal. Der größte wird geliefert; bei nur einem vorkommenden Wert ist das halt der größte.
     
    Atrus2711, 7. September 2009
    #13
  14. Das ist mir klar, deshalb geht dein vorschlag ja nicht.

    genau ja, es geht offenabr also nicht alles aufs mal.

    Das ist klar.

    Ich probiers jetzt per recordset und vba. gibt mir wesentlich mehr kontrolle udn ich kann alles auf einen rutsch erledigen.
     
    Zuletzt von einem Moderator bearbeitet: 7. Januar 2021
    Perfectdark, 7. September 2009
    #14
  15. Wie wärs denn, wenn du das Kriterium rauslässt. Dann kriegst du pro Feld1 alle Maximalwerte von Feld 2, auch die leeren (wenn es nur leere gibt). DIe, die dann als Maxwert leer liefern, sind dann aber halt restanten, für die es keine Daten gibt. Immerhin siehst du sie dann; aber mangels Werten für Feld gibts dann da nix.

    Recordset ist Unsinn. Das ist eine Datenbankaufgabe.
     
    Atrus2711, 7. September 2009
    #15
Thema:

SELECT DISTINCT nur auf Feld und nicht Row

Die Seite wird geladen...
  1. SELECT DISTINCT nur auf Feld und nicht Row - Similar Threads - SELECT DISTINCT Feld

  2. DropDown öffnen bei anwählen (.Select) einer Zelle

    in Microsoft Excel Hilfe
    DropDown öffnen bei anwählen (.Select) einer Zelle: Hallo und guten Abend, ich suche nach einem unter Office 365 funktionierenden VBA-Code, um ein DropDown-Menü direkt zu öffnen, wenn man die betreffenden Zelle anwählt, OHNE das NUMLOCK jedes mal...
  3. Access - SQL: Inhalt auf 255 Zeichen beschränkt

    in Microsoft Access Hilfe
    Access - SQL: Inhalt auf 255 Zeichen beschränkt: Hallo zusammen, in Access habe ich ein Modul mit folgender Funktion: Public Function SQLListe(Nummer As Long) As String Dim strSQL As String Dim rs As DAO.Recordset strSQL = "SELECT Dokument...
  4. SELECT mit ORDER BY sortiert nicht richtig

    in Microsoft Access Hilfe
    SELECT mit ORDER BY sortiert nicht richtig: Moin, ich habe folgendes Problem: Innerhalb einer Funktion führe ich ein SELECT aus. Die Variable "kalCode" wird über den Funktionsaufruf richtig befüllt. Code: SELECT * from kalKaliber where Code...
  5. SELECT DISTINCTROW Warenbezeichnung from X funktioniert nicht

    in Microsoft Access Hilfe
    SELECT DISTINCTROW Warenbezeichnung from X funktioniert nicht: Hallo, ich hänge fest :-( Ich habe ein Formular in dem ich per SELECT DISTINCTROW Warenbezeichnung from X Werte auswähle. X ist eine Abfrage, die je nach Artikelnummer mir die unterschiedlichen...
  6. Access SQL: SELECT-Klausel

    in Microsoft Access Tutorials
    Access SQL: SELECT-Klausel: Access SQL: SELECT-Klausel Access für Microsoft 365 Access 2019 Access 2016 Access 2013 Access 2010 Access 2007 Mehr... Weniger...
  7. SELECT-Anweisung

    in Microsoft Access Tutorials
    SELECT-Anweisung: SELECT-Anweisung Access für Microsoft 365 Access 2019 Access 2016 Access 2013 Access 2010 Access 2007 Mehr... Weniger...
  8. SELECT...INTO-Anweisung

    in Microsoft Access Tutorials
    SELECT...INTO-Anweisung: SELECT...INTO-Anweisung Access für Microsoft 365 Access 2019 Access 2016 Access 2013 Access 2010 Access 2007 Mehr... Weniger...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden