Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL-statement - Logikproblem? (https://www.delphipraxis.net/66761-sql-statement-logikproblem.html)

Emilio 3. Apr 2006 21:07

Datenbank: DBISAM • Version: 4.21 • Zugriff über: Native

SQL-statement - Logikproblem?
 
Liebe DP,

in einem table habe ich die MwSt-Sätze, die es so gibt und geben wird hinterlegt.
Dabei ist [MwStID] = index und [MwStSatz] der eigentliche Wert.
Nun sollte ich in der Artikelstammdaten-Ansicht die MwSt für Deutschland [MwSt1] und die für das Ausland [MwSt2] anzeigen. [MwSt1] ist kein Problem, aber Ihr Zahnfleisch ...

So sieht das bisherige SQL-Statement aus:

Delphi-Quellcode:
SELECT
ARTID MID, EK, LVP, max(DSNR) MUPDATE into memory\temp
FROM
PLI
GROUP BY
ARTID;

SELECT
ARTID, EK, LVP, AUSA, PSatz, Bemerkung, GroupSortNr, ArtName, Artikelgruppe, KF, Artikelklasse, Artikelbereich, ProvArt, ARTStat,
EK+AUSA*EK/100 AS [BP], LVP-EK AS[MARGE], (LVP-EK)/LVP *100 AS [MARGE%], (LVP-(EK+AUSA*EK/100))*PSatz/100 AS [ProvLVP],
MwStSatz, (LVP+(LVP*MwStSatz/100)) AS BruttoLVP , DSNR
FROM
PLI
JOIN
ART on PLI.ARTID = ART.ARTID
JOIN
ARTGRUP on ARTGRPID = ART.ARTGRP
JOIN
PLIST ON PLI.Status = PLIST.STATID
JOIN
ASA ON ASAID = ART.ASA
JOIN
PSA ON PSID= ART.PS
JOIN
ARTCLS ON ARTClassID = ART.ARTClass
JOIN
ARTBER ON ARTBERID = ART.ARTBER
JOIN
PART ON PARTID = ART.PART
JOIN
MWST ON MwStID= ART.MwSt1
JOIN
memory\temp on ARTID = MID and DSNR = MUPDATE
ORDER BY
Artikelgruppe, GroupSortNr;
OK, die verwendeten Namen sind nicht auf Anhieb einleuchtend - sorry for that!

Meine Frage(n):
wie bekomme ich [MwSt2] in dieses Statement rein? - bisher hagelts nur DBISAM engine errors.
Ist der Aufbau ungeeignet, wenn aus einem "Nachschlage-table" Feldwerte aus einer Column mehrfach benötigt werden?

Freue mich auf Eure Antworten

VG
Emilio

mquadrat 4. Apr 2006 08:55

Re: SQL-statement - Logikproblem?
 
Kenne den DBISAM Dialekt nicht genau, aber theoretisch sollte es so gehen:

SQL-Code:
JOIN
MWST AS MWST_DE ON MWST_DE.MwStID = ART.MwSt1 
JOIN
MWST AS MWST_AUSLAND ON MWST_AUSLAND.MwStID = Art.MwSt2
Wie gesagt Syntax ist geraten ;) Aber wenn du die gleiche Tabelle mehrmals joinen willst, musst du mit Aliasnamen arbeiten und die Felder entsprechend mit Tabellenalias.Feldname ansprechen.

Emilio 4. Apr 2006 15:41

Re: SQL-statement - Logikproblem?
 
Hi mquadrat,

Danke für Deinen Tipp.
Haut aber leider nicht hin; bekomme in der query bei [MwSt1] das gleiche wie bei [MwSt2], also in beiden Spalten 0 oder 16 oder aber Fehlermeldungen.

:gruebel:

VG
Emilio

alzaimar 4. Apr 2006 15:52

Re: SQL-statement - Logikproblem?
 
Ich habe mir das Statement nicht im Detail angeschaut, aber grundsätzlich kannst du mit Subselects arbeiten, sowas wie das hier:

SQL-Code:
Select ArtikelNr,
       Preis,
       (select Steuersatz from Steuern where stID = Artikel.stID) as Mwst
from Artikel
Aber einige Dialekte sind zu blöd dazu, obwohl es SQL-Standard ist.

Das gleiche liefert:
SQL-Code:
Select ArtikelNr,
       Preis,
       Steuersatz as MWst
from Artikel left join Steuersatz on Steuersatz.stID = Artikel.stID
Wichtig ist das LEFT join, sonst werden nur die Artikel mit gültigem Verweis in die Steuersatztabelle aufgelistet.

Emilio 4. Apr 2006 19:53

Re: SQL-statement - Logikproblem?
 
Hi @all,

der Vorschlag von mquadrat ist doch der Beste und dazu der Richtige. :thumb:
Nachdem ich mich vergewissern konnte, dass DBISAM self joins beherrscht, habe ichs erstmal im "Kleinen" versucht - und siehe da: es duut!

Das Wichtigste habe ich beim ersten Versuch versäumt:


Zitat:

Zitat von mquadrat

Aber wenn du die gleiche Tabelle mehrmals joinen willst, musst du mit Aliasnamen arbeiten und die Felder entsprechend mit Tabellenalias.Feldname ansprechen.

Das mit den mit AliasNamen-Ansprechen hatte ich nicht ganz richtig umgesetzt - was ein paar Buchstaben ausmachen können ...
:duck:


Vielen herzlichen Dank für Deine/Eure Hilfe.

VG
Emilio


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