Doppelte Werte nur einmal auswerten

LauraM

Ensign
Registriert
Nov. 2019
Beiträge
133
Guten Morgen,

ich habe eine Tabelle mit doppelten Einträgen und möchte gerne nur den ersten Eintrag ausgeben lassen:
idauftrag
11test
11test2
12test1
13test2
14test1
14test3
15test4
16test1

wenn ich so abfrage:
Code:
select distinct id from firma

Dann bekomme ich richtige Antwort, allerdings nur die id's. Wenn ich bei der Abfrage noch Auftrag abfrage, bekomme ich doppelte Werte als Ergebnis.


mit dieser Abfrage:
Code:
SELECT * FROM (
  SELECT *, ROW_NUMBER() OVER (PARTITION BY id ORDER BY id DESC) AS row_number
  FROM firma
) AS rows

Als Ergebnis bekomme ich auch dopllete Werte nun in extra Spalte ist gezählt wie oft.

Wie kann ich die obige Abfrage verbessern?

Viele Grüße und danke im Voraus!

P.S: Ich weiß. ich habe hier im Forum so ein Thema erwähnt, aber ohne Lösung. Könnte mir jemand nur bitte sagen, wie bekomme ich aus der Tabelle nur einen DAtensatz, obwohl manchmal mehreer zu einem id vorkommen?
 
Zuletzt bearbeitet:
Guten Morgen,

Code:
SELECT  auftrag, count(auftrag)
FROM firma
Group By auftrag
Der schmeißt die alles nur 1mal aus und dahinter wie oft es vorhanden ist
 
Ja, danke, nun ich möchte an sich als Lösung folgendes:
nrauftrag
11test
12test1
13test2
14test

Also ich möchte an sich, damit die jeweilige Abfrage mir nur einen Datensatz jeweuls ausgibt (obwohl oft ist, dass ein nr meherere Datensätze hat)


Hier habe ich eine Abfrage:

Code:
SELECT nr, count(auftrag)
FROM firma
Group By nr

Als Lösung bekomme ich alle nr einzeln und eine Spalte, wo steht, wie oft kommt der nr vor, bzw wieviel Datensätze gehören zu dem Nummer.
In diesem Fall würde ich gerne eine vielleicht Unterabfrage bauen, die zeigt mir die Datensätze, wo nur ein Datensatz vokommt.
 
Da ist doch 2mal "test" drin.
Und da steht nr statt id

Code:
SELECT  id, auftrag
FROM firma
Group By auftrag
 
LauraM schrieb:
Ja, danke, nun ich möchte an sich als Lösung folgendes:
nrauftrag
11test
12test1
13test2
14test

SELECT nr, auftrag
FROM firma
GROUP BY nr
 
Zoddel schrieb:
SELECT nr, auftrag
FROM firma
GROUP BY nr

ich habe das schon versucht, aber es kommt Meldung:
Meldung 8120, Ebene 16, Status 1, Zeile 34
Die firma.auftrag-Spalte ist in der Auswahlliste ungültig, da sie nicht in einer Aggregatfunktion und nicht in der GROUP BY-Klausel enthalten ist.
 
Achso ich sehe gerade das deine ids auch doppelte dabei sind.

Was da nochher raus kommen soll, versteh ich immer noch nicht
Sonst halt die Group By

Code:
GROUP BY nr , auftrag
 
LauraM schrieb:
ich habe das schon versucht, aber es kommt Meldung:
Meldung 8120, Ebene 16, Status 1, Zeile 34
Die firma.auftrag-Spalte ist in der Auswahlliste ungültig, da sie nicht in einer Aggregatfunktion und nicht in der GROUP BY-Klausel enthalten ist.

Gut, immerhin hast du ne brauchbare DB drunter =)

Was du da machen möchtest ist an sich für die Datenbank total unlogisch.
Da dein SQL nicht definierst, ob du für z.B. für id 11 entweder "11 test" oder "11 test2" geliefert bekommen magst.
Deine DB erwartet (richtigerweise) ein SQL, was immer zu einem eindeutigen Ergebnis führt.
 
Leute, sie will pro ID ein Random Element haben, also macht man group by id um eine Gruppe zu bidlenb, ist doch nicht so schwer zu verstehen. Das man dann nicht einfach auftrag in der Projektion verwenden kann, sollte wohl den SQL Experten hier auch klar sein? Und was bringt es denn jetzt
GROUP BY nr , auftrag
Damit hast du pro ID noch jeweils Gruppen pro Auftrag. Damit hast du gar nix erreicht.

Gar nix ...
Mach
SQL:
SELECT  nr, min(auftrag)
FROM firma
GROUP BY nr
und gut ist. Evtl. gibt es auch eine andere Aggrgat Funktion wie SAMPLE, aber ich kenne die genutzte DB hier auch nicht. Ist aber auch egal.
 
  • Gefällt mir
Reaktionen: R O G E R
Zoddel schrieb:
Da dein SQL nicht definierst, ob du für z.B. für id 11 entweder "11 test" oder "11 test2" geliefert bekommen magst.
Deine DB erwartet (richtigerweise) ein SQL, was immer zu einem eindeutigen Ergebnis führt.

abcddcba schrieb:

DAS ist das Geheimnis.
 
Zurück
Oben