Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Subselect auf einen Treffer zulassen (https://www.delphipraxis.net/75339-subselect-auf-einen-treffer-zulassen.html)

Kalli 17. Aug 2006 23:01

Datenbank: DB2 • Version: 7 • Zugriff über: SQL Direct

Subselect auf einen Treffer zulassen
 
Hallo zusammen,
folgendes Problem:
Tabelle verm01 sind die Stammdaten von Vermittlern,
Verm04 sind die Vermittlernummer je Gesellschaft. Es können aber auch mehrere Nummern je Gesellschaft vorhanden sein.

Mit der folgenden Anweisung möchte ich eine Liste erstellen.

select
a.VERMNR,a.NAME ||', '|| a.VORNAME VermName,a.Filiale,

(select GeVermNr from vd.verm04 b where b.vermnr = a.vermNr and b.Gesellsch = 'VKB') VKB_Nr,
(select GeVermNr from vd.verm04 d where d.vermnr = a.vermNr and d.Gesellsch = 'BK' ) BK_Nr,
(select GeVermNr from vd.verm04 c where c.vermnr = a.vermNr and c.Gesellsch = 'BAY') LV_Nr

from VD.VERM01 a

order by a.filiale

Das Haut prima hin, bis der erste Vermittler mit mehr als einer Nummer je Gesellschaft auftaucht. Wie kann ich die Trefferzahl um Subselect auf eins begrenzen? Mit "fetsh first row only" bekomme ich Fehlermeldungen.


???????????

Kalli

omata 17. Aug 2006 23:31

Re: Subselect auf einen Treffer zulassen
 
Hallo Kalli,

wie wäre es so...

SQL-Code:
SELECT a.vermnr, a.name ||', '|| a.vorname VermName, a.Filiale,
       (SELECT MIN(GeVermNr)
        FROM vd.verm04 b
        WHERE b.vermnr = a.vermNr
          AND b.Gesellsch = 'VKB') VKB_Nr,
       (SELECT MIN(GeVermNr)
        FROM vd.verm04 d
        WHERE d.vermnr = a.vermNr
          AND d.Gesellsch = 'BK' ) BK_Nr,
       (SELECT MIN(GeVermNr)
        FROM vd.verm04 c
        WHERE c.vermnr = a.vermNr
          AND c.Gesellsch = 'BAY') LV_Nr
FROM vd.verm01 a
ORDER BY a.filiale
Aber ist das sinnvoll? Wenn es mehrere Zeilen gibt, welche lässt man weg? Ist es da nicht sinnvoller auch alle auszugeben...

SQL-Code:
SELECT a.vermnr, a.name ||', '|| a.vorname VermName, a.Filiale,
       b.GeVermNr VKB_Nr,
       d.GeVermNr BK_Nr,
       c.GeVermNr LV_Nr
FROM vd.verm01 a
LEFT JOIN vd.verm04 b
  ON    a.vermnr = b.vermNr
     AND b.gesellsch = 'VKB'
LEFT JOIN vd.verm04 c
  ON    a.vermnr = c.vermNr
     AND c.gesellsch = 'BAY'
LEFT JOIN vd.verm04 d
  ON    a.vermnr = d.vermNr
     AND d.gesellsch = 'BK'
ORDER BY a.filiale
Gruss
Thorsten

Kalli 18. Aug 2006 07:46

Re: Subselect auf einen Treffer zulassen
 
Hallo Thorsten

vielen Dank für die Hilfe. Es macht genau das, was ich suche. Es hätte mir gereicht, wenn irgend eine Nummer angezeigt worden wäre. So ist es allerdings besser. Jetzt muss ich nur noch verstehen, was und wie die Abfrage funktioniert.

Gibt es einen guten Buchtipp zu dem Thema SQL?

Gruß

Kalli


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:45 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