Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL abfrage aber wie? (https://www.delphipraxis.net/46917-sql-abfrage-aber-wie.html)

Tau 2. Jun 2005 22:27

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

SQL abfrage aber wie?
 
Hallo Leute

habe leichte Probleme die Anweisung in die Richtige vorm zu bekommen.

folgende Situation

ich habe zwei Tabellen (TB025 u. TB020) die in einer 1 zu n Beziehung stehen.
in der Spalte TB025.F012 sollten keine Doppelten Werte vorkommen.

für die Anzeige brauche ich Folgende Spalten TB025.F012, TB020.F013, TB020.F014

ein Group BY über alle Drei Spalten kann ich nicht machen da ich sonst nicht alle Daten bekomme.

bis jetzt habe ich leider nur das:
SQL-Code:
SELECT TB025.F012 AS TB025F012, TB020.F013 AS TB020F013, TB020.F014 AS TB020F014
FROM TB025 LEFT OUTER JOIN
     TB020 ON TB025.F012 = TB020.F000
kann mir vielleicht einer einen Tipp geben wie ich das Lösen kann. :wall: :wall:

schöne Grüsse
Tau

jensw_2000 2. Jun 2005 23:29

Re: SQL abfrage aber wie?
 
Was ist denn jetzt eigentlich die Frage ? :gruebel:

Möchtest du verhindern, das die Daten aus TB025 mehrfach ausgegeben werden wenn TB020 mehrere korrespondierende Datensätze zu TB025.F012 enthält ? Wenn ja, was soll denn stattdessen ausgegeben werden ?

Tau 2. Jun 2005 23:56

Re: SQL abfrage aber wie?
 
Hallo jensw_2000

Die Haupt Tabelle ist TB025 und steht in einer 1 zu n Beziehung mit TB020

Wie kann ich das bewerkstelligen das ich das unten angeführte Ergebnis bekomme.

Folgende Spalten TB025.F012, TB020.F013, TB020.F014 Anzeigen kann
ohne das in Spalte TB025.F012 Doppelten Werte habe :wall: :wall:

schöne Grusse
Tau

jensw_2000 3. Jun 2005 00:14

Re: SQL abfrage aber wie?
 
Das geht dann doch aber nur mit einem Group by, es sei denn du willst (z.B.) immer nur den ersten korrespondierenden Datensatz aus TB020 ausgeben oder eine Aggregatfunktion für TB020 verwenden.

SQL-Code:
/* GROUP BY
TB025.F012 wird jedoch immer noch mehrfach ausgegeben
wenn TB020.F013 und TB020.F014 variable Werte enthalten
*/

SELECT  TB025.F012 AS TB025F012,
         TB020.F013 AS TB020F013,
         TB020.F014 AS TB020F014 
FROM    TB025 
         LEFT OUTER JOIN
         TB020 ON TB020.F000 = TB025.F012
GROUP BY TB025.F012,
         TB020.F013,
         TB020.F014

Schöne Grüße,
Jens
:hi:

Tau 3. Jun 2005 01:01

Re: SQL abfrage aber wie?
 
Hallo Jens

Danke vorerst für deine Antwort

aber gibt es denn nicht ein Möglichkeit das die Group By Funktion nur auf die Spalte TB025.F012
sich bezieht ohne dass ich die anderen Spalten berücksichtigen muss in der Group By.

Gibt es nicht irgend wie eine Möglichkeit mit einer unter abfrage oder so?

z.B.( Select TB025.F012 From TB025 Group By TB025.F012 )
und dann darüber einen Select mit Left outer Join auf die Tabelle TB020 zu legen. :gruebel:

schöne Grüsse
Tau

jensw_2000 3. Jun 2005 01:34

Re: SQL abfrage aber wie?
 
Zitat:

z.B.( Select TB025.F012 From TB025 Group By TB025.F012 )
und dann darüber einen Select mit Left outer Join auf die Tabelle TB020 zu legen.
In TB025 ist F012 doch schon eindeutog oder? Sonst wäre es doch keine 1/n sondern eine n/n Beziehung ...

Somit bedeutet das
SQL-Code:
Select TB025.F012 From TB025 Group By TB025.F012
das selbe wie das
SQL-Code:
Select TB025.F012 From TB025



Ich denke du hast lediglich folgende Möglichkeiten ...

Code:
Quelldaten

TB025.F012   (TB020.F000) TB020.F013     TB020.F014
-----------------------------------------------------
1        1             Test          Tester
1        1             Delphi        Praxis
2        2             Delphi     7
3        3             Beispiel     egal
1        1             Delphi        Praxis
3        3             Beispiel     egal
1        1             Delphi        Praxis
2        2             Delphi     7
3        3             Beispiel     egal
1        1             Delphi        Praxis

Code:
Ergebnis der derzeitigen Abfrage (Group by)

TB025.F012   (TB020.F000) TB020.F013     TB020.F014
-----------------------------------------------------
1        1             Test          Tester
1        1             Delphi        Praxis
2        2             Delphi      7
3        3             Beispiel        egal

Mit etwas tricksen die Ausgabe doppelten Werte von TB025.F012 unterdrücken

TB025.F012   (TB020.F000) TB020.F013     TB020.F014
-----------------------------------------------------
1        1             Test          Tester
                       Delphi        Praxis
2        2             Delphi        7
3        3             Beispiel        egal

Ausgabe von TB020 abschneiden

TB025.F012   (TB020.F000) TB020.F013     TB020.F014
-----------------------------------------------------
1        1             Test          Tester
2        2             Delphi        7
3        3             Beispiel        egal


Datensätze aus TB020 gruppieren und ausgeben, falls weniger als 2 Unterdatensätze in TB020 übrig bleiben, sonst Verweis auf mehrere Datensätze ausgeben

TB025.F012   (TB020.F000) TB020.F013     TB020.F014
-----------------------------------------------------
1        1             (2 Detaildatensatz-Varianten in TB020)
2        2             Delphi        7
3        3             Beispiel        egal


Datensätze aus TB020 nicht guppieren und ausgeben, falls weniger als 2 Unterdatensätze in TB020 vorhanden sind, sonst Verweis auf mehrere Datensätze ausgeben

TB025.F012   (TB020.F000) TB020.F013     TB020.F014
-----------------------------------------------------
1        1             (5 Detaildatensätze in TB020)
2        2             (2 Detaildatensätze in TB020)
3        3             (3 Detaildatensätze in TB020)

Tau 3. Jun 2005 02:02

Re: SQL abfrage aber wie?
 
Hallo Jens

habe übersehen das es eine n/n Beziehung ist.

au das tut weh :wall:

sorry wahr mein Fehler

Zitat:

In TB025 ist F012 doch schon eindeutig oder? Sonst wäre es doch keine 1/n sondern eine n/n Beziehung ...
Bin gerade am testen ob es mit einem Umweg über eine eigene Sicht mit
(Select TB025.F012 From TB025 Group By TB025.F012) und dann über das
Ergebnis eine Select mit Left outer Join auf die Tabelle TB020 geht.

schöne Grüsse
Tau

jensw_2000 3. Jun 2005 05:52

Re: SQL abfrage aber wie?
 
Lass das mit dem View. Views sind nicht immer sofort aktuell.
Ich habe mir in meinem aktuellen Projekt nen Wolf gesucht, weil ich ein paar mal am Tag spontane Fehlausgaben hatte. Dann habe ich Dank Leuselator die Views aus dem "internen" SQL-Code verbannt und :mrgreen: .

Wenn ich mir das so anschaue,
SQL-Code:
SELECT  TB025.F012 AS TB025F012,
         TB020.F013 AS TB020F013,
         TB020.F014 AS TB020F014 
FROM    TB025 
         LEFT OUTER JOIN
         TB020 ON TB020.F000 = TB025.F012 
GROUP BY TB025.F012,
         TB020.F013,
         TB020.F014
und du alle TB025.F012 Werte nur einmal haben möchtest,
dann sollte genau das
SQL-Code:
SELECT  TB020.000 AS TB025F012,
         TB020.013 AS TB020F013,
         TB020.014 AS TB020F014 
FROM    TB020
WHERE   TB020.000 
         IN
         (
         SELECT DISTINCT TB025.F012 
         FROM TB025
         )
die gewünschte Ergebnismenge liefern.


Schöne Grüße,
Jens
:hi:

alzaimar 3. Jun 2005 07:02

Re: SQL abfrage aber wie?
 
Blöde Frage:
Wo ist der Unterschied zu:
SQL-Code:
SELECT  distinct
         TB020.F000 AS TB025F012,
         TB020.F013 AS TB020F013,
         TB020.F014 AS TB020F014
FROM    TB020 Join TB025 on TB020.F000 = TB025.F012

Tau 3. Jun 2005 07:44

Re: SQL abfrage aber wie?
 
Hallo zusammen

Es funktioniert so wie ich es brauche super.

D A N K E :dancer: :witch: :dancer2:

Schöne Grüsse
Tau


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:40 Uhr.
Seite 1 von 2  1 2      

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