Zum Inhalt springen

doppelte Werte einer Spalte ausblenden


hty

Empfohlene Beiträge

Hallo

ich habe eine Access 2000 Datenbank vor mir und folgendes Problem.

Eine Tabelle mit mehreren Spalten die ich jetzt ganz einfach Spalte-1 bis Spalte-5 nenne.

Spalte-1 = Primärschlüssel

Spalte-2 = ist eine Zahl die in der Tabelle mehrfach vorkommt

Um zu verhindern das Datensätze angezeigt werden die doppelt vorkommen, hat man mir empfohlen in der SQL-Ansicht "DISTINCT" hinter "SELECT" zu setzen.... Wer sagts das funktioniert auch :o)

:o( Aber nur solange ich auf die Anzeige des Inhaltes der Spalte-1 (Primärschlüssel) verzichte !!!

Ich kann jede erdenkliche Kombination der verschiedenen Spalten zusammenstellen und bekomme immer das gewünschte Ergebnis.

Nur wenn ich in meine Abfrage den Primärschlüsssel (also die Spalte-1) hinzunehme bekomme ich wieder alle Datensätze angezeigt... So das trotz dem DISTINCT-Befehl die Zahlen die in Spalte-2 doppelt vorkommen angezeigt werden.

Ich möchte aber Spalte-1 bis Spalte-5 anzeigen lassen

und Datensätze die unter Spalte-2 den selben Eintrag haben nur je einmal sehen.

Gehe ich das komplet verkehrt an?

Wer kann mir sagen wie ich es richtig mache?

Kann mann überhaupt verstehen was mein Problem ist? :(

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich denke schon...

...mein Vorschlag:

SELECT MIN(Spalte1) AS Spalte1, Spalte2, Spalte3, Spalte4, Spalte5

FROM WasAuchImmer

WHERE lablahfasel

GROUP BY Spalte2, Spalte3, Spalte4, Spalte5

ORDER BY Spalte2

(zum Bleistift)

Damit hast Du jede Datenzeile nur einmal, und auch nur einen Eintrag bei Spalte1 (in dem Fall halt die kleinste ID-Nummer, wo es auftritt).

Ausserdem bin ich mittlerweile vom DISTINCT abgekommen - ist zwar weniger Schreibarbeit, aber anscheinend im Vergleich zu einem GROUP BY auf alle Felder bei grossen Abfragen langsamer.

Gruss,

der Onkel

Link zu diesem Kommentar
Auf anderen Seiten teilen

Grundsätzlich ist dies das falsche Vorgehen, denn der DISTINCT filtert nur diejenigen doppelten Einträge, die sich aus ALLEN Spalten ergeben. Wenn du also den Primärschlüssel mit selektierst, geht der in Kombination mit den anderen Spalten in den DISTINCT ein.

Was erwartest du denn, dass der Select zurückliefert, z.B. in folgendem Fall?


Spalte 1        Spalte 2

----------------------------

1                   1

1                   2

1                   3

1                   4

2                   1

2                   2

2                   3

2                   4

Wenn du in Spalte 2 nur einmal die "1" ausgegeben haben möchtest, was soll dir der Select dann in Spalte 1 zurückliefern? "1" oder "2"?

Das "weiß" das DB System natürlich nicht.

Eine Möglichkeit wäre, hier sog. Gruppenfunktionen anzuwenden, wie es HolzOnkel bereits vorgeschlagen hat mit der "MIN" Methode. Allerdings stellt sich hier wirklich die Frage, was du denn überhaupt willst?!

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 1 Monat später...

Hallo

Ich habe folgende Anweisung vorliegen:

SELECT Artikel.[Artikel-Nr], Artikel.[Video-Nr], [Archiv Video].Titel, [Archiv Video].Künstlername

FROM Verkaufsdaten RIGHT JOIN (Kaufdaten RIGHT JOIN ([Archiv Video] RIGHT JOIN Artikel ON [Archiv Video].[Video-Nr] = Artikel.[Video-Nr]) ON Kaufdaten.KaufNr = Artikel.KaufNr) ON Verkaufsdaten.AuftragNr = Artikel.AuftragNr

WHERE (((Artikel.KaufNr)<>3) AND ((Artikel.Verkauft)=False))

ORDER BY [Archiv Video].Titel;

"Artikel.[Artikel-Nr]" ist eine ID (AutoWert) und ist dem entsprechend eindeutig (kommt nur einmal vor).

"Artikel.[Video-Nr]" kann mehrfach vorkommen (sie identifiziert das Video)

Ich hingengen möchte das jedes Video (Artikel.[Video-Nr]) nur einmal vorkommt.

Beispiel:

Artikel.[Artikel-Nr]----Artikel.[Video-Nr]----

--------- 1 ------------------- 44 -------

--------- 2 ------------------- 25 -------

--------- 3 ------------------- 25 -------

--------- 4 ------------------- 11 -------

--------- 5 ------------------- 38 -------

Erwünschtes Ergebnis wäre die Auflistung der Artikel mit der Nr. 1,2,4,5

Als Lösungsvorschlag (hier nachzulesen: http://www.fachinformatiker-world.de/forums/showthread.php?s=&postid=407868#post407868) wurde mir folgendes genannt (an dieser Stelle einen herzlichen Dank an HolzOnkel und loeti):

SELECT MIN(Spalte1) AS Spalte1, Spalte2, Spalte3, Spalte4, Spalte5

FROM WasAuchImmer

WHERE lablahfasel

GROUP BY Spalte2, Spalte3, Spalte4, Spalte5

ORDER BY Spalte2

Mein Umsetzungsversuch sah wie folgt aus:

SELECT MIN(Artikel.[Artikel-Nr]) AS Artikel.[Artikel-Nr], Artikel.[Video-Nr], [Archiv Video].Titel, [Archiv Video].Künstlername

FROM Verkaufsdaten RIGHT JOIN (Kaufdaten RIGHT JOIN ([Archiv Video] RIGHT JOIN Artikel ON [Archiv Video].[Video-Nr] = Artikel.[Video-Nr]) ON Kaufdaten.KaufNr = Artikel.KaufNr) ON Verkaufsdaten.AuftragNr = Artikel.AuftragNr

WHERE (((Artikel.KaufNr)<>3) AND ((Artikel.Verkauft)=False))

GROUP BY Artikel.[Video-Nr], [Archiv Video].Titel, [Archiv Video].Künstlername

ORDER BY [Archiv Video].Titel;

Offensichtlich ist das falsch, aber wo?? Was konkrett ist hier falsch?

Meldung:

"Die SELCT-Anweisung schließt ein reserviertes Wort oder ein Argument ein, das/der falsch, mit falscher Zeichensetzung oder überhaut nicht eingegeben wurde."

Woran scheitert es?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Mein Umsetzungsversuch sah wie folgt aus:

SELECT MIN(Artikel.[Artikel-Nr]) AS Artikel.[Artikel-Nr], Artikel.[Video-Nr], [Archiv Video].Titel, [Archiv Video].Künstlername

FROM Verkaufsdaten RIGHT JOIN (Kaufdaten RIGHT JOIN ([Archiv Video] RIGHT JOIN Artikel ON [Archiv Video].[Video-Nr] = Artikel.[Video-Nr]) ON Kaufdaten.KaufNr = Artikel.KaufNr) ON Verkaufsdaten.AuftragNr = Artikel.AuftragNr

WHERE (((Artikel.KaufNr)<>3) AND ((Artikel.Verkauft)=False))

GROUP BY Artikel.[Video-Nr], [Archiv Video].Titel, [Archiv Video].Künstlername

ORDER BY [Archiv Video].Titel;

Offensichtlich ist das falsch, aber wo?? Was konkrett ist hier falsch?

Meldung:

"Die SELCT-Anweisung schließt ein reserviertes Wort oder ein Argument ein, das/der falsch, mit falscher Zeichensetzung oder überhaut nicht eingegeben wurde."

Woran scheitert es?

Äh, auf den ersten Blick:

MIN(Artikel.[Artikel-Nr]) AS Artikel.[Artikel-Nr], 

Wenn Du ein Feld mit "AS" in den Select einbeziehst, hat der Tabellenbezeichner da drin nichts zu suchen... also sollte es eher:

MIN(Artikel.[Artikel-Nr]) AS [Artikel-Nr], 

heissen.

Versuch es erstmal damit, ich bin heute etwas im Streß und kann erst heute Abend mal genauer drauf schauen...

Gruss,

der Onkel

Link zu diesem Kommentar
Auf anderen Seiten teilen

Jaaaaa :o) Funktioniert !

So sieht das ganze aus:

-------------------------------------------------------

SELECT MIN (Artikel.[Artikel-Nr]) AS [Video-Nr], [Archiv Video].[Titel], [Archiv Video].[Künstlername]

FROM Verkaufsdaten RIGHT JOIN (Kaufdaten RIGHT JOIN ([Archiv Video] RIGHT JOIN Artikel ON [Archiv Video].[Video-Nr]=[Artikel].[Video-Nr]) ON [Kaufdaten].[KaufNr]=[Artikel].[KaufNr]) ON [Verkaufsdaten].[AuftragNr]=[Artikel].[AuftragNr]

WHERE ((([Artikel].[KaufNr])<>3) And (([Artikel].[Verkauft])=False))

GROUP BY Artikel.[Video-Nr], [Archiv Video].Titel, [Archiv Video].Künstlername

ORDER BY [Archiv Video].[Titel];

-------------------------------------------------------

Die Tabellenbezeichner habe ich nach "AS" herausgenommen.

Nur die Werte (Spalten) die aus anderen Tabellen stammen haben ihre Tabellenbezeichner behalten.

...und siehe da .... es funktioniert ;o)

Herzlichen Dank

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...