Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Doppelte Einträge bleiben bei mehr Spalten vorhanden (https://www.delphipraxis.net/165657-doppelte-eintraege-bleiben-bei-mehr-spalten-vorhanden.html)

t0mmy 10. Jan 2012 14:35

Datenbank: MSSQL • Version: 2008 • Zugriff über: ADO

Doppelte Einträge bleiben bei mehr Spalten vorhanden
 
Hallo!

Also ich hab eine SQL Abfrag Mit
Code:
Select Distinct <Spalte1>...
Distinct dient dazu das ich keine Doppelten einträge auslese.

Wenn ich jetzt:

Code:
SELECT DISTINCT <Spalte1>, <Spalte2>, <Spalte3>...
Abfrage, dann schreibt er wieder doppelte Einträge in meine Grid -.-

Bummi 10. Jan 2012 14:48

AW: Doppelte Einträge bleiben bei mehr Spalten vorhanden
 
Irgendwo wir ein Unterschied sein zwischen den Zeilen ...

t0mmy 10. Jan 2012 15:08

AW: Doppelte Einträge bleiben bei mehr Spalten vorhanden
 
Nimm mal an das Distinct gilt dann für alle 3 Spalten.. brauch dann Group By aber das will auch nicht funktioniert, da kommt ne Fehlermeldung seitens MsSQL:

DeddyH 10. Jan 2012 15:09

AW: Doppelte Einträge bleiben bei mehr Spalten vorhanden
 
Und diese Fehlermeldung ist so geheim, dass man sie auf gar keinen Fall nennen darf :?

t0mmy 10. Jan 2012 15:11

AW: Doppelte Einträge bleiben bei mehr Spalten vorhanden
 
Die '...........Spalte2'-Spalte ist in der Auswahlliste ungültig, da sie nicht in einer Aggregatfunktion und nicht in der GROUP BY-Klausel enthalten ist.

Jumpy 10. Jan 2012 15:19

AW: Doppelte Einträge bleiben bei mehr Spalten vorhanden
 
Distinct is ja ein impliziertes Group By, daher ist ein weiteres Group By oft sinnlos/falsch. Brauchst du vllt. Order By?

Ausserdem zeigst du ja nur sehr wenig von dem Statement. Gibts's da denn noch Aggregatfunktionen oder Where-Klauseln. Dann brauchst du im Zusammenhang mit Group By vllt. eher ein Having

DeddyH 10. Jan 2012 15:23

AW: Doppelte Einträge bleiben bei mehr Spalten vorhanden
 
SQL-Code:
SELECT
  Spalte1, Spalte2, Spalte3
FROM
  Tabelle
WHERE
  Bedingung
GROUP BY
  Spalte1, Spalte2, Spalte3

t0mmy 10. Jan 2012 15:29

AW: Doppelte Einträge bleiben bei mehr Spalten vorhanden
 
@DeddyH

Diese Variante funktioniert jedoch erhalte ich ja doppelte Einträge und ich möchte so wie Distinct die doppelten Filtern

DeddyH 10. Jan 2012 15:31

AW: Doppelte Einträge bleiben bei mehr Spalten vorhanden
 
Vielleicht definierst Du erst einmal, wann ein Datensatz als doppelt gilt. Wenn alle abgefragten Felder gleich sind?

t0mmy 10. Jan 2012 15:37

AW: Doppelte Einträge bleiben bei mehr Spalten vorhanden
 
Also ich habe mehrer einträge in der Spalte1 die gleichen namen haben.
In der Spalte2 unterscheiden sie sich dann aber.

Jetzt werden mir natürlich alle Einträge die in der Spalte1 vorhanden sind ausgegeben.
Mit Distinct konnte ich es so lösen das ich halt nur die erste Spalte ausgebe dafür keine doppelten einträge habe.

Jetzt brauch ich aber die zweite Spalte und die Spalte3.

Ich hab da bissal im internet geschaut und auf GROUP BY gestoßen... jedoch funzt das nicht -.-

DeddyH 10. Jan 2012 15:39

AW: Doppelte Einträge bleiben bei mehr Spalten vorhanden
 
Wie soll das auch funktionieren? Du brauchst (sofern ich das richtig verstanden habe) eine Aggregatfunktion in einem Subselect, mit dem Du im Hauptquery vergleichen kannst.

[edit] Angenommen, die Tabelle hat einen Primärschlüssel namens ID. Dann könne es so funktionieren (ungetestet):
SQL-Code:
SELECT
  Spalte1, Spalte2, Spalte3
FROM
  Tabelle A
WHERE
  ID =
  (
    SELECT
      MAX(ID)
    FROM
      Tabelle
    WHERE
      Spalte1 = A.Spalte1
    AND
      Spalte2 = A.Spalte2
    AND
      Spalte3 = A.Spalte3 
  )
[/edit]

[edit2] Soll tatsächlich Spalte1 einmalig vorkommen, dann lass im Subselect die Vergleiche mit Spalte2 und Spalte3 weg. Allerdings erschließt sich mir der Sinn einer solchen Abfrage nicht. [/edit2]

p80286 10. Jan 2012 16:48

AW: Doppelte Einträge bleiben bei mehr Spalten vorhanden
 
Um welche Art von Daten handelt es sich denn?
Wieviele Tabellen sind beteiligt?
Ich werde das Gefühl nicht los, daß hier fröhlich aneinander vorbei geschrieben wird.

Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:44 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz