Wie kann man doppelte Felder von SQL nicht ausgeben lassen
Erik Tews
- datenbank
Hi
Ich hab hier ein kleines Problem. Ich hab z. B. eine Tabelle mit Nummer und Wert. Also wenn ich Select * from tabelle mache, könnte die Ausgabe so aussehen:
1 A
1 B
1 Test
2 irgendwas
3 was
3 anderes
Ich möchte nun, daß bei der Ausgabe alle Zeilen, wo Nummer schon mal vorgekommen ist, nicht ausgegeben werden. Also es keine 2 Zeilen gibt, wo Nummer den gleichen Wert hat. Das würde dann so aussehen:
1 A
2 irgendwas
3 was
Kennt jemand eine Möglichkeit, sowas in SQL zu machen?
hi!
Ich möchte nun, daß bei der Ausgabe alle Zeilen, wo Nummer schon mal vorgekommen ist, nicht ausgegeben werden. Also es keine 2 Zeilen gibt, wo Nummer den gleichen Wert hat. Das würde dann so aussehen:
Vielleicht hilft dir das: <62839.html>
bye, Frank!
hi!
Ich möchte nun, daß bei der Ausgabe alle Zeilen, wo Nummer schon mal vorgekommen ist, nicht ausgegeben werden. Also es keine 2 Zeilen gibt, wo Nummer den gleichen Wert hat. Das würde dann so aussehen:
Vielleicht hilft dir das: <62839.html>
Ja, ist schon mal nahe dran. Ich will jetzt nur nicht wissen, wieviele unterschiedliche Zeilen es gibt, ich will einfach nur Zeilen haben, wo Feld X unterschiedlich ist. Kennst du dafür vielleicht auch eine Lösung?
Ich möchte nun, daß bei der Ausgabe alle Zeilen, wo Nummer schon mal vorgekommen ist, nicht ausgegeben werden. Also es keine 2 Zeilen gibt, wo Nummer den gleichen Wert hat. Das würde dann so aussehen:
1 A
2 irgendwas
3 wasKennt jemand eine Möglichkeit, sowas in SQL zu machen?
SQL 'denkt' mengenorientiert.
Wie willst Du SQL klar machen, welche (!) der gleichen
Zeilen Du haben willst?
Innerhalb einer Menge gibt es keine "Reihenfolge".
"group by" ist in Deinem Falle nicht anwendbar, weil Du
damit nur Spalten ausgeben kannst, die entweder durch
Gruppierungsfunktionen erzeugt wurden oder selbst das
Gruppierungskriterium waren.
Du kannst aber in SQL den Tabelleninhalt sortiert nach
dieser Spalte machen (select * from tabellenname order
by feld1) und beim Auslesen der Treffer prüfen, ob der
Wert von feld1 identisch zu dem des Vorgängers ist.
Das ist einfach und effizient; Du hast aber keinerlei
Kontrolle darüber, welchen der drei Werte mit feld1='1'
Du zuerst bekommst ("order by" ist m. E. im Allgemeinen
implementierungsspezifisch bezüglich seines tie-breakers).
Du kannst sogar das "order by" über mehrere Spalten
laufen lassen (select * from tabellenname order by
feld1, feld2), und *vielleicht* hilft Dir das dabei,
innerhalb gleicher feld1-Werte den von Dir gewünschten
feld2-Treffer nach vorne zu sortieren. Dann wäre Dein
Problem *fast* ausschließlich mit SQL-Mitteln gelöst
(nur das Wegwerfen der unerwünschten Folgezeilen müßtest
Du im nachgeschalteten Programm separat erledigen).
1 A
1 B
1 Test
2 irgendwas
3 was
3 anderesIch möchte nun, daß bei der Ausgabe alle Zeilen, wo Nummer schon mal vorgekommen ist, nicht ausgegeben werden. Also es keine 2 Zeilen gibt, wo Nummer den gleichen Wert hat. Das würde dann so aussehen:
1 A
2 irgendwas
3 was
Hallo,
wenn du immer den min. Wert in FeldB zu der ID in FeldA willst:
SQL = "SELECT FeldA, min(FeldB) FROM Tabelle GROUP BY FeldA"
wenn du immer den max. Wert in FeldB zu der ID in FeldA willst:
SQL = "SELECT FeldA, max(FeldB) FROM Tabelle GROUP BY FeldA"
Tschau, Stefan