Erik Tews: Wie kann man doppelte Felder von SQL nicht ausgeben lassen

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?

  1. 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!

    1. 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?

  2. 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?

    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).

  3. 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

    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