Doppelte Werte nicht anzeigen : Distinct

abcddcba schrieb:
ich gebe dir jetzt zum letzten mal den Tip, zeig bitte eine Bsp Tabelle + das gewünschte Ergebnis!
Was soll der Quatsch mit diesen kryptischen Textaufgaben immer. Wozu gibt es formale Syntax, formale Sprachen etc. eigentlich? Eine Tabelle zeigen ist doch so einfach, oder nicht?

Also:
1. ich habe folgende Tabelle ...
2. ich möchte folgendes Resultat ...
3. ich hab schon folgende Query versucht ...
Wenn ich die Abfrage mache:
Code:
select nr von tab1 group by nr
Dann bekomme ich mein gewünschtes Ergebnis. Aber ich benötige noch ein Feld. Es ist tatsächlich so, wie uch oben die Tabelle gezeigt habe, dass Doppelsätze sind und die andere Spalten unterschiedliche Eintragungen haben.
Deshalb wenn ich abfrage:
Code:
select nr, spalte1  von tab1 group by nr
Dann es geht nicht, da auch die 2. Saplte bei group by muss sein. Wenn ich bei group by nr1, Spalte 1 mache, bekomme ich alles, was gibts unter nr und spalte 1, also doppelte nrs.
 
LauraM schrieb:
Guten Morgen, schade, dass du mir nicht helfen kannst. Es gibt hier in Forum Fragen und sofort Antworte. Ich habe eine Frage und bitte ich um eine Antwort und kriege ich schimpfe, weil ich was nicht weiss.:confused_alt:

Also ich glaube dir wurde schon mehr als genug geholfen
 
beig1 schrieb:
Also ich glaube dir wurde schon mehr als genug geholfen
Hallo beig1, viel geholfen? weil das schon die 2. Seite ist? Ich habe einen wahrscheinlich banalen Problem und benötige Hilfe. Am Anfang die Tipps mit min, max waren leider falsch. Deshalb habe ich weiter gefragt, weil ich auf mein Ergebnis nicht komme. Gestern wurde mir gesagt,, dass ich mein Problem noch mal schilden soll, habe ich gemacht und bekomme ich Belehrungen und ich wollte Tipps zu meiner Tatsache.
Vielleicht kannst du mir sagen, wie ich mein Problem lösen kann?

(ich muss sagen, belehren und kritisieren kann man einfach machen, aber ich möchte gerne Hilfe von euch)
 
LauraM schrieb:
Kannst mir nur Tip geben, wie ich das mit join verknüpfen soll, um Doppelsätze zu vermeiden?
Es wäre sehr nett.
Da musst du auf eine Unterabfrage joinen, in dem du nur eine Zeile aus deine tab2 ausgibst. Wie du die mehreren Sätze in tab2 auf eine reduzierst musst du selber entscheiden, TOP 1, Gruppierung mit MIN oder MAX. Es soll aber wohl auch ein Grund geben, warum du nur ein Satz haben willst, und eine fachliche Logik zu entscheiden, welchen Satz das sein sollte. Bisher wirkt es so, als würdest du einfach willkürlich irgendwelche Daten ausgeben wollen, Hauptsache, es ist nur ein Satz pro 'Nr'.
 
Hi, das problem bei Min Max liegt daran, dass die prozedur liest die Länge der Eintrag.
Wenn ich habe s Tabelle und mache Fuktion Max, liest mir dann die Spalte 1 mit cdf. Ich möchte, dass die Abfrage holt mir immer den ersten Satz zu der Nr., Also in dem Fall soll 1 ab, 2a, 3b als Ergebnis kommen. Kann man das überhaupt machen?
1ab

1
cdf
2a
3b
 
LauraM schrieb:
(ich muss sagen, belehren und kritisieren kann man einfach machen, aber ich möchte gerne Hilfe von euch)
Das Problem ist, dass du dein Problem nicht wirklich schilderst. Du gibtst uns irgendwelche rätselhafte Angaben und wir müssen raten, was du damit bezweckst. Dir wurde SEHR oft gebeten, einfach mal dein Datenmodell herzuzeigen und ständig schreibst du irgendwas mit nr 123, a, b, c, tab2 nr 123, fhh. Was auch immer das bedeuten soll. Das sind keine Daten, womit man was anfangen kann.
Ergänzung ()

LauraM schrieb:
Hi, das problem bei Min Max liegt daran, dass die prozedur liest die Länge der Eintrag.
Wenn ich habe s Tabelle und mache Fuktion Max, liest mir dann die Spalte 1 mit cdf. Ich möchte, dass die Abfrage holt mir immer den ersten Satz zu der Nr., Also in dem Fall soll 1 ab, 2a, 3b als Ergebnis kommen. Kann man das überhaupt machen?
1ab

1
cdf
2a
3b

Sag dann bitte zumindest, WARUM nur ein Satz ausgegeben werden sollte, und welcher deiner Meinung nach richtig wäre..??
 
Oelepoeto schrieb:
Das Problem ist, dass du dein Problem nicht wirklich schilderst. Du gibtst uns irgendwelche rätselhafte Angaben und wir müssen raten, was du damit bezweckst. Dir wurde SEHR oft gebeten, einfach mal dein Datenmodell herzuzeigen und ständig schreibst du irgendwas mit nr 123, a, b, c, tab2 nr 123, fhh. Was auch immer das bedeuten soll. Das sind keine Daten, womit man was anfangen kann.
Ich gebe einfach Beispiel Tabelle. Spielt an sich keine Rolle, oder? Meine richtige Tabelle sieht auch so aus, allerdings mit anderen Daten.


Andere Punkt ist, ich habe noch eine saubere Tabelle, ws ich schon erwähnt habe nur mit nr. Ich wollte ganz einfach tab1 und tab2 über nr verknüpfen (mot join), aber kriege nicht hin die Dppelsätze zu vermeiden.

Ergänzung ()

Oelepoeto schrieb:
Das Problem ist, dass du dein Problem nicht wirklich schilderst. Du gibtst uns irgendwelche rätselhafte Angaben und wir müssen raten, was du damit bezweckst. Dir wurde SEHR oft gebeten, einfach mal dein Datenmodell herzuzeigen und ständig schreibst du irgendwas mit nr 123, a, b, c, tab2 nr 123, fhh. Was auch immer das bedeuten soll. Das sind keine Daten, womit man was anfangen kann.
Ergänzung ()



Sag dann bitte zumindest, WARUM nur ein Satz ausgegeben werden sollte, und welcher deiner Meinung nach richtig wäre..??
Das erste Satz ist immer "gültiger", aber habe ich kein Datum, deshalb kann ich nicht definieren.
 
Hast du in deine Tabelle zumindest eine Identity Spalte wenn schon kein Datum da ist? Dann könntest du z.B. nach der Spalte sortieren (SELECT TOP 1 * FROM tab2 ORDER BY ID). Eine Identity Spalte ist aber auch noch keine Gewährleistung für eine zeitlich richtige Reihenfolge.
Besser wäre es, gleich das Datenmodell zu ergänzen und beim laden der Daten ein Datumswert mit zu speichern.
Ergänzung ()

LauraM schrieb:
Ich gebe einfach Beispiel Tabelle. Spielt an sich keine Rolle, oder? Meine richtige Tabelle sieht auch so aus, allerdings mit anderen Daten.
Da hast du schon recht, wenn der Aufbau in deinen echten Tabellen gleich ist tut es nicht zur Sache. Es ist aber schwer weiterzuhelfen, wenn du dein Zweck nicht erklärst und sich aus deine Beispieldaten auch kein Sinn ergibt.
 
Oelepoeto schrieb:
Das Problem ist, dass du dein Problem nicht wirklich schilderst. Du gibtst uns irgendwelche rätselhafte Angaben und wir müssen raten, was du damit bezweckst. Dir wurde SEHR oft gebeten, einfach mal dein Datenmodell herzuzeigen und ständig schreibst du irgendwas mit nr 123, a, b, c, tab2 nr 123, fhh. Was auch immer das bedeuten soll. Das sind keine Daten, womit man was anfangen kann.
Ergänzung ()



Sag dann bitte zumindest, WARUM nur ein Satz ausgegeben werden sollte, und welcher deiner Meinung nach richtig wäre..??
Das erste Satz ist immer "gültiger", aber habe ich kein Datum, deshalb kann ich nicht definieren.
Ergänzung ()

Oelepoeto schrieb:
Hast du in deine Tabelle zumindest eine Identity Spalte wenn schon kein Datum da ist? Dann könntest du z.B. nach der Spalte sortieren (SELECT TOP 1 * FROM tab2 ORDER BY ID). Eine Identity Spalte ist aber auch noch keine Gewährleistung für eine zeitlich richtige Reihenfolge.
Besser wäre es, gleich das Datenmodell zu ergänzen und beim laden der Daten ein Datumswert mit zu speichern.
Ergänzung ()


Da hast du schon recht, wenn der Aufbau in deinen echten Tabellen gleich ist tut es nicht zur Sache. Es ist aber schwer weiterzuhelfen, wenn du dein Zweck nicht erklärst und sich aus deine Beispieldaten auch kein Sinn ergibt.

Wenn ich das (SELECT TOP 1 * FROM tab2 ORDER BY ID) abfrage, zeigt mir nur den ersten Datensatz.
Sorry, ich wusste nicht, dass es so komplex ist.

Ich habe schon oben geschrieben: ich habe eine "saubere" Tabelle tab1 nur mit nr. Nun wollte ich mit join die tab2 mit doppelten Einträgen verknüpfen, aber trotzdem bekomme ich alle Eintrage : mit Doppelsätzen.
 
LauraM schrieb:
dass die prozedur liest die Länge der Eintrag.
Mit "prozedur" ist das Programm gemeint, dass das fertige xml weiter verarbeitet?
Und diese prozedur möchte immer den Eintrag mit der kleinsten Länge?

LauraM schrieb:
Ich möchte, dass die Abfrage holt mir immer den ersten Satz zu der Nr.
Du (nicht die "prozedur"?) möchtest also den Eintrag, der zu erst für diese Nummer in die Datenbank geschrieben wurde? Das halte ich für eine sehr ungenaue Abfrage und kann man mWn nur mit TOP 1 lösen.
 
Darlis schrieb:
Mit "prozedur" ist das Programm gemeint, dass das fertige xml weiter verarbeitet?
Und diese prozedur möchte immer den Eintrag mit der kleinsten Länge?
XML Datei, die ich aufgrund meine Daten aufbaue- an sich habe ich fertig, nun fehlen mir die Daten aus letzte Tabelle, Tab2 , wo wir ganze Zeit schreiben.


Du (nicht die "prozedur"?) möchtest also den Eintrag, der zu erst für diese Nummer in die Datenbank geschrieben wurde? Das halte ich für eine sehr ungenaue Abfrage und kann man mWn nur mit TOP 1 lösen.

Ich möchte den ersten Eintrag zu einem nr, die in der Tabelle vorkommt. Also so zu sagen: frage nach nr , spalte 1, spalte 2. Wie in der Tabelle, ich möchte nur die ersten Einträge zu nr:
ist:

1a
dd
1sss

2

a

s
3
ab

ss
3aagg

soll
1add
2as
3abss
Ergänzung ()

Oelepoeto schrieb:
Da musst du auf eine Unterabfrage joinen, in dem du nur eine Zeile aus deine tab2 ausgibst. Wie du die mehreren Sätze in tab2 auf eine reduzierst musst du selber entscheiden, TOP 1, Gruppierung mit MIN oder MAX. Es soll aber wohl auch ein Grund geben, warum du nur ein Satz haben willst, und eine fachliche Logik zu entscheiden, welchen Satz das sein sollte. Bisher wirkt es so, als würdest du einfach willkürlich irgendwelche Daten ausgeben wollen, Hauptsache, es ist nur ein Satz pro 'Nr'.
Ich habe zu wenig Erfahrung mit Unterabfragen. Kannst du sagen, wie ich das machen kann.
 
Zuletzt bearbeitet:
LauraM schrieb:
Ich möchte den ersten Eintrag zu einem nr, die in der Tabelle vorkommt.
Da ist die finale Anforderung? Das hat mit der Länge aus #25 also nichts zu tun, genauso wenig wie das (damals noch korrekte) MIN am Anfang des Threads? Das ist schon verwirrend, wenn sich die Anforderungen von Post zu Post ändern.

In dem Fall eben kein JOIN verwenden, sondern ein Subselect mit TOP1 , z.B. hier beschrieben: https://www.essentialsql.com/get-re...-20-using-subqueries-in-the-select-statement/
 
Ich wollte nach etwas sortieren, wenn ich nach nr sortiere, dann bekomme ich auch das gleiche Ergebnis, mit Doppelsätzen.
Ich habe ausprobiert, was es passiert. Also ob ich nach spalte1, oder nr sortiere- das gleiche Ergebnis.

ich versuche das machen, was du grade gesendethast mit subquery, aber ich habe das schon gemacht und war auch nicht das Ergebnis, war gleiche Ergebnis, wie bisher mit allen Doppelsätzen. Ich versuche noch mal.
Ergänzung ()

ich kriege es nicht hin, ich weiss es nicht, wie ich mit subquery machen kann.
 
LauraM schrieb:
Ich wollte nach etwas sortieren, ...
"etwas" ist extrem ungenau. Wir hatten ja schon festgehalten, dass du nicht sortieren kannst, weil man nicht nach "den ersten Eintrag in der Tabelle" sortieren kann.

LauraM schrieb:
... wenn ich nach nr sortiere, dann bekomme ich auch das gleiche Ergebnis, mit Doppelsätzen.
Klar, weil Sortierung nichts an der Anzahl der Zeilen ändert.
 
Darlis schrieb:
"etwas" ist extrem ungenau. Wir hatten ja schon festgehalten, dass du nicht sortieren kannst, weil man nicht nach "den ersten Eintrag in der Tabelle" sortieren kann.

Klar, weil Sortierung nichts an der Anzahl der Zeilen ändert.
Ich schreibe hier, alles was ich ausprobiere, das ist nicht falsch gemeint von mir.
 
LauraM schrieb:
ich kriege es nicht hin
Die Antwort kommt ja sehr schnell und es fehlt das Query, das du verwendet hast.
 
Wenn dieser Abfrage funktioniert nicht, wie ich gemeint habe: nehme nr, falls nr mehr als einmal vorkommt, nimm das erste. Das war meine Idee.

Vielelicht kannst du mir sagen, wie ich die Abfrage richtig mit join formulieren kann, mit 2 Tabellen, was ich oben geschrieben habe.
 
LauraM schrieb:
Vielelicht kannst du mir sagen, wie ich die Abfrage richtig mit join formulieren kann
Nein, kann ich nicht, das hatte ich schon in #32 geschrieben. Evtl. kann man das mit einem JOIN machen, das übersteigt aber meine Kenntnisse.
 
Zurück
Oben