AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi SQL: 2 Ergebniszeilen in eine vereinen
Thema durchsuchen
Ansicht
Themen-Optionen

SQL: 2 Ergebniszeilen in eine vereinen

Ein Thema von Nju · begonnen am 19. Okt 2007 · letzter Beitrag vom 23. Okt 2007
Antwort Antwort
Seite 1 von 2  1 2      
Nju

Registriert seit: 16. Jun 2004
41 Beiträge
 
#1

SQL: 2 Ergebniszeilen in eine vereinen

  Alt 19. Okt 2007, 08:39
Datenbank: Access • Version: 2003 • Zugriff über: ADO
Hallo,
ich benutze eine MS Access-Datenbank zusammen mit List & Label 12.

Die Situation:

Ich habe zwei Tabellen, die eine Tabelle mit Stammdaten, wie Bezeichnung, eindeutige Nummer, Bankleitzahl, etc, nennen wir diese "Tabelle_Stamm", die zweite besteht aus der Anschrift, nennen wir diese Tabelle "Tabelle_Anschrift". Die Datensätze der Tabelle_Anschrift können anhand der eindeutigen Nummer den Datensätzen der Tabelle_Stamm zugeordnet werden, zudem kennzeichnet der jeweilige Datensatz in der Tabelle_Anschrift, ein Feld namens "Art", ob es sich um eine normale Postanschrift, Postfach oder Großlieferantenanschrift handelt.

Das Problem:

Aufgrund der Art der Anschrift, kann bei einer einfachen SQL-Abfrage

Bsp.
SQL-Code:
Select Tabelle_Stamm.*, Tabelle_Anschrift.* from Tabelle_Stamm, Tabelle_Anschrift
where Tabelle_Stamm.Nummer = Tabelle_Anschrift.Nummer
and Tabelle_Stamm.Nummer = "137"
ein Ergebnis mit bis zu drei Datensätzen vorkommen, da es ja 3 verschiedene Arten gibt. Für List & Label ist diese Vorgehensweise aber ungeeignet, da mir diese drei Mal die gleiche Einrichtung zurückgeben würde, nur eben mit unterschiedlichen Anschriften.

Meine Frage:

Wie muss der SQL-Befehl gestaltet werden, damit ich mit Access eine Ergebniszeile wiederbekomme, in der, falls vorhanden, alle drei Arten und somit Datensätze, vereint worden sind? Gibt es virtuelle Felder, die man bei Bedarf anlegen kann?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: SQL: 2 Ergebniszeilen in eine vereinen

  Alt 19. Okt 2007, 08:42
Das hört sich für mich nach einer Pivot-Tabelle (auch Kreuztabelle genannt) an. Ich weiß nicht, inwieweit das mit Access umzusetzen ist, aber hier mal ein Link dazu.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: SQL: 2 Ergebniszeilen in eine vereinen

  Alt 19. Okt 2007, 08:44
In dem du 3 Joins auf die 3 Arten machst du den Felder verschiedene Namen gibst.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: SQL: 2 Ergebniszeilen in eine vereinen

  Alt 19. Okt 2007, 08:46
Jepp, oder so, dann muss es aber IMHO ein OUTER JOIN sein.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Nju

Registriert seit: 16. Jun 2004
41 Beiträge
 
#5

Re: SQL: 2 Ergebniszeilen in eine vereinen

  Alt 22. Okt 2007, 10:09
Hallo und vielen Dank für Eure Antworten. Ich habe das Wochenende mal etwas genutzt und mich daran gesetzt. Leider ist das MS Access Kompendium von M+T nicht gerade hilfreich und auch die Onlinehilfe befasst sich nur mit der Entwurfsansicht.

Könnte jemand so freundlich sein und mir ein kleines Beispiel zu der oben beschriebenen Problematik geben? Sollte das zu viel Mühe machen wäre ich dankbar über eine Onlinequelle, in die ich mich reinlesen könnte (bitte speziell auf MS Access zugeschnitten).

Vielen vielen Dank im Voraus!
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: SQL: 2 Ergebniszeilen in eine vereinen

  Alt 22. Okt 2007, 10:39
Hallo,

prinzipiell geht das so:

SQL-Code:
select S.*, K.Anschrift, Z.Anschrift, L.Anschrift
from Tabelle_Stamm S
left outer join Tabelle_Anschrift K ON S.Nummer = K.Nummer and K.art = 'Korrespondenz'
left outer join Tabelle_Anschrift Z ON S.Nummer = K.Nummer and K.art = 'Zustellung'
left outer join Tabelle_Anschrift K ON S.Nummer = K.Nummer and K.art = 'Lager'
where S.Nummer = :Nummer
Beachte aber die von JET-SQL geforderte Klammerung (fehlt hier).

Grüße vom marabu
  Mit Zitat antworten Zitat
Nju

Registriert seit: 16. Jun 2004
41 Beiträge
 
#7

Re: SQL: 2 Ergebniszeilen in eine vereinen

  Alt 22. Okt 2007, 11:24
Vielen Dank! Nur leider erhalte ich nun bei folgendem Code die Fehlermeldung 'Syntaxfehler (fehlender Operator) in Abfrageausdruck ".':

SQL-Code:
SELECT S.*, K.*, L.*
FROM Tabelle_Stamm S
LEFT OUTER JOIN Tabelle_Anschrift K ON S.Nummer = K.Nummer AND S.Verband = K.Verband AND L.Art = "1"
LEFT OUTER JOIN Tabelle_Anschrift L ON S.Nummer = L.Nummer AND S.Verband = L.Verband AND L.Art = "2"
WHERE S.Nummer = "10" AND S.Verband = "Hauptnehmer"

Ich habe auch etwas rumgespielt und erstmal die zweite Left Outer Join-Abfrage ausgelassen und erhalte ebenfalls eine Fehlermeldung, wenn ich nicht nach dem ON bis hinter "1" das in Klammern setze. Mit Klammer komme ich zu einem Ergebnis.
Aber mit einem zweiten LEFT OUTER JOIN komme ich gar nicht mehr weiter. Woran kann das liegen, dass er mein zweites LEFT OUTER JOIN gar nicht will und die oben beschriebene Fehlermeldung generiert wird?

Als Hinweis:
Ich befinde mich derzeit noch in MS Access und deren SQL-Abfrageditor, also noch nichts in Delphi selbst.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: SQL: 2 Ergebniszeilen in eine vereinen

  Alt 22. Okt 2007, 12:28
Wer von uns beiden hat eigentlich das Access-Handbuch?

(Hint: Ich nicht)

SQL-Code:
SELECT S.*, K.*, L.*
FROM ( Tabelle_Stamm S
LEFT OUTER JOIN Tabelle_Anschrift K ON S.Nummer = K.Nummer AND S.Verband = K.Verband AND L.Art = "1" )
LEFT OUTER JOIN Tabelle_Anschrift L ON S.Nummer = L.Nummer AND S.Verband = L.Verband AND L.Art = "2"
WHERE S.Nummer = "10" AND S.Verband = "Hauptnehmer"
Etwa so stelle ich mir die Klammerung vor. Du solltest das aber wirklich mal anhand der Syntax-Referenz prüfen.

Freundliche Grüße
  Mit Zitat antworten Zitat
Nju

Registriert seit: 16. Jun 2004
41 Beiträge
 
#9

Re: SQL: 2 Ergebniszeilen in eine vereinen

  Alt 23. Okt 2007, 08:15
Vielen Dank für deine Antwort! Der Lösungsvorshclag funktioniert nicht (Fehlermeldung "Fehler in FROM-Syntax").

Dieses "Microsoft Office Access 2003"-Kompendium von M+T beschreibt einzigst den Weg über die Entwurfs-Ansicht und gibt so gut wie keine Tipps im Umgang mit der SQL-Syntax. Problem ist aber, dass ich mit der Entwurfs-Ansicht solch komplexe Abfragen nicht hinbekomme und ich möchte mich nicht umständlich erst in die Entwurfs-Ansicht und deren Funktionen einarbeiten, wenn der "simple" SQL-Befehl doch eigentlich hervorragend funktioniert (sofern er funktioniert) - zumal ich diesen ja später unter Delphi dann brauche.
  Mit Zitat antworten Zitat
Nju

Registriert seit: 16. Jun 2004
41 Beiträge
 
#10

Re: SQL: 2 Ergebniszeilen in eine vereinen

  Alt 23. Okt 2007, 10:12
So, mittlerweile habe ich eine Lösung gefunden, die NICHT mit left outer join bewerkstelligt wurde, sondern mit inner join (Zusammengeklickt mit der Entwurfs-Ansicht von Access):

SQL-Code:
SELECT S.*, K.*, S.Nummer, S.Nummer, S.verband, S.verband, K.art, L.*, S.nummer, S.verband, L.art
FROM tabelle_anschrift AS L, tabelle_stamm AS S, tabelle_anschrift AS K
WHERE (((S.nummer)=[K].[nummer] And (S.nummer)="10" And (S.nummer)=[L].[nummer]) AND ((S.verband)="Hauptnehmer" And (S.verband)=[K].[verband] And (S.verband)=[L].[verband]) AND ((K.art)="1") AND ((L.art)="2"));
Wenn jetzt aber kein Datensatz für diese Nummer mit der Art 2 existiert (aber Art 1 schon), dann zeigt er mir keine Ergebniszeile an.

Wie kann ich diese Ergebniszeile doch anzeigen lassen und die Felder für Art 2 bleiben dafür leer?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:28 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