Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Einfache Distinct Abfrage

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von Peter21, 10 Oktober 2013.

  1. Peter21

    Peter21 Neuer Benutzer

    Hallo zusammen möchte eine einfache Distinct Abfrage machen:

    select
    distinct gvkey, Name, Ort,Datum
    from Tabell1

    Allerdings schreibt er mir identische gvkeys mit rein. Wenn ich Name, Ort,Datum weglasse, funktioniert die Abfrage, sprich nur eine eindeutige GVKeys in der Tabelle. Kann mir jemand sagen wo der Fehler liegt?
     
  2. ukulele

    ukulele Datenbank-Guru

    Das DISTINCT bezieht sich nicht ausschließlich auf die Spalte gvkey sondern auf das gesamte Abfrage Ergebnis. Wenn also gvkey 2x Wert A hat und Name 2x Wert A hat wird es nur eine Zeile im Ergebnis geben. Wenn aber Name einmal A einmal B ist sind beide Erebnisse einmalig.

    PS: GROUP BY ist eine Alternative wenn sich die anderen Spalten gut aggregieren lassen. Da du dort aber offensichtlich auch Textspalten hast (Name) wäre es wichtig festzulegen welcher Name angezeigt werden soll und ob das überhaupt Sinn ergibt im Ergebnis.
     
    Zuletzt bearbeitet: 10 Oktober 2013
  3. akretschmer

    akretschmer Datenbank-Guru

    Ich weiß nicht, ob M$SQL das auch kann: PostgreSQL kennt DISTINCT ON (spalte), das wäre hier vielleicht das, was der Fragesteller sucht.

    Demo:
    Code:
    test=*# create table foo (c1 int, c2 int);
    CREATE TABLE
    test=*# copy foo from stdin;
    Enter data to be copied followed by a newline.
    End with a backslash and a period on a line by itself.
    >> 1  1
    >> 1  2
    >> 2  1
    >> 2  2
    >> 3  1
    >> \.
    test=*# select distinct c1, c2 from foo;
     c1 | c2
    ----+----
      2 |  2
      3 |  1
      1 |  2
      2 |  1
      1 |  1
    (5 rows)
    
    test=*# select distinct on (c1) c1, c2 from foo;
     c1 | c2
    ----+----
      1 |  1
      2 |  1
      3 |  1
    (3 rows)
    
    test=*# select distinct on (c1) c1, c2 from foo order by c1, c2 desc;
     c1 | c2
    ----+----
      1 |  2
      2 |  2
      3 |  1
    (3 rows)
    
     
  4. Peter21

    Peter21 Neuer Benutzer

    Danke für die Infos. Konnte das Problem damit beheben.
     
  5. ukulele

    ukulele Datenbank-Guru

Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden