![]() |
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:
kann mir vielleicht einer einen Tipp geben wie ich das Lösen kann. :wall: :wall:
SELECT TB025.F012 AS TB025F012, TB020.F013 AS TB020F013, TB020.F014 AS TB020F014
FROM TB025 LEFT OUTER JOIN TB020 ON TB025.F012 = TB020.F000 schöne Grüsse Tau |
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 ? |
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 |
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: |
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 |
Re: SQL abfrage aber wie?
Zitat:
Somit bedeutet das
SQL-Code:
das selbe wie das
Select TB025.F012 From TB025 Group By TB025.F012
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) |
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:
(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 |
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:
und du alle TB025.F012 Werte nur einmal haben möchtest,
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 dann sollte genau das
SQL-Code:
die gewünschte Ergebnismenge liefern.
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 ) Schöne Grüße, Jens :hi: |
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 |
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 02:46 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz