Announcement

Collapse
No announcement yet.

Extra Spalte in Abfragetabelle für doppelte Spalteneinträge

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Extra Spalte in Abfragetabelle für doppelte Spalteneinträge

    Hallo werte SQL Experten,

    ich weiß gar nicht ob mein Anliegen überhaupt im Bereich des Möglichen liegt, aber man kann ja mal fragen.
    ich würde gerne für doppelt vorkommende Einträge innerhalb einer Spalte eine Tabelle nach der Abfrage zurückbekommen, die eine extra Spalte als boolean besitzt und die besagt um der Name eines Datensatzes mehrmals vorkommt oder nicht.

    Ich habe beispielsweise folgende Tabelle und Daten:

    Tablle Schlagwort:

    id Name
    1 Rechner
    2 Laptop
    3. Fisch
    4. Tiger
    5. Fisch



    Ich würde nun gerne nach einer bestimmten Abfrage folgende Tabelle zurückbekommen:

    id Name double
    1 Rechner false
    2 Laptop false
    3. Fisch true
    4. Tiger false
    5. Fisch true

    Es soll also eine extra Spalte namens double hinzugefügt werden. Alle Schlagwörter, deren Namen mindestens noch ein weiteres mal in der Tabelle vorkommen, sollen auf true gesetzt werden. Alle anderen sollen false sein.

    Ist das möglich??

    Wäre für jede Antwort sehr dankbar.

    liebe Grüße daniel

  • #2
    Hallo Daniel,

    das ist mit einem einfach Subselect möglich; wobei ich es sinniger finde, sich die Anzahl ausgeben zu lassen als die Tatsache, das es mehr als einmal vorkommt.

    Die Case Anweisung musst Du ggf. an "Deinen" SQL Dialekt anpassen.

    [highlight=SQL]CREATE TABLE #tmp
    (id int, name varchar(10));

    insert into #tmp VALUES (1, 'Rechner');
    insert into #tmp VALUES (2, 'Laptop');
    insert into #tmp VALUES (3, 'Fisch');
    insert into #tmp VALUES (4, 'Tiger');
    insert into #tmp VALUES (5, 'Fisch');

    SELECT *
    ,CASE WHEN (SELECT COUNT(*) FROM #tmp AS SUB
    WHERE SUB.name = #tmp.name
    GROUP BY SUB.name) > 1
    THEN 1
    ELSE 0 END AS Doublet
    FROM #tmp;
    GO

    DROP TABLE #tmp;
    [/highlight]
    Olaf Helper

    <Blog> <Xing>
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich

    Comment


    • #3
      Originally posted by O. Helper View Post
      Hallo Daniel,

      das ist mit einem einfach Subselect möglich; wobei ich es sinniger finde, sich die Anzahl ausgeben zu lassen als die Tatsache, das es mehr als einmal vorkommt.

      Ja stimmt, das würde mehr Sinn machen.
      Vielen Dank für deine Antwort!

      Comment


      • #4
        Originally posted by O. Helper View Post


        Die Case Anweisung musst Du ggf. an "Deinen" SQL Dialekt anpassen.
        Ich würde die Anweisung gerne unabhängig vom DBMS schreiben. Daher wäre es praktisch, wenn ich zuvor irgendwie abfragen könnte, welches DBMS benutzt wird. Kann man das irgendwie abfragen?

        lg

        Comment


        • #5
          Hallo Daniel,

          bei meinen Analysen für [wikibooks] Einführung in SQL sind mir bei CASE keine syntaktischen Unterschiede aufgefallen. Ich glaube deshalb, du kannst (bis zum Beweis des Gegenteils) eine einheitliche Version verwenden.

          Ich kann mir nicht vorstellen, dass man durch einen einheitlichen SELECT die Art des DBMS abfragen kann. Man kann allenfalls verschiedene Befehle ausprobieren und z.B. in einem UNION als Ergebnistabelle zusammenfassen; aber ob das immer funktioniert und wirklich sinnvoll, wage ich sehr zu bezweifeln.

          Gruß Jürgen

          Comment


          • #6
            okay, vielen Dank für die Hilfe.
            Ich habe mal eine andere Frage in diesem Zusammenhang. Irgendwie kriege ich das nicht raus.

            Gehen wir wieder von der gleichen Tabelle aus:

            Ich möchte, dass er mir mehrere Namen ausgibt abhängig von der id und diese dann alphabetisch sortiert.
            Zum Beispiel möchte ich, dass er mir den Namen von der id =1, den von id = 2 und id=4 ausgibt und diese drei Namen alphabetisch sortiert.
            Wie mache ich das denn? Irgendwie komme ich gerade nicht weiter.

            Mit:
            Code:
            SELECT Name WHERE id=1
            bekomme ich erstmal ja nur einen von den dreien. Wie bekomme ich denn die anderen raus=
            Wenn ich AND benutzen würde, würden sie sich ja gegenseitig ausschließen, sodass ich keine Ergebnismenge habe.
            Ich kann die Select Anweisungen ja aber auch nicht getrennt halten, da ich sie ja noch sortieren möchte.

            Ist das wirklich etwas schwieriger oder stelle ich mich einfach dumm an?

            lg

            Comment


            • #7
              Das geht mit dem IN Operator + ORDER BY:
              [highlight=SQL]SELECT Name
              FROM Tabelle
              WHERE id IN (1, 2, 4)
              ORDER BY name[/highlight]
              Olaf Helper

              <Blog> <Xing>
              * cogito ergo sum * errare humanum est * quote erat demonstrandum *
              Wenn ich denke, ist das ein Fehler und das beweise ich täglich

              Comment


              • #8
                Hallo Daniel,

                Originally posted by daniel_bln View Post
                Ist das wirklich etwas schwieriger oder stelle ich mich einfach dumm an?
                Weder noch. Aber vielleicht solltest du dich konsequent in SQL einarbeiten, siehe meinen o.g. Link auf Wikibooks.

                Jürgen

                PS. Wie gut, dass das Internet keine Gerüche übertragen kann - von wegen Eigenlob und so.

                Comment

                Working...
                X