AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi SQL-statement - Logikproblem?
Thema durchsuchen
Ansicht
Themen-Optionen

SQL-statement - Logikproblem?

Ein Thema von Emilio · begonnen am 3. Apr 2006 · letzter Beitrag vom 4. Apr 2006
Antwort Antwort
Emilio

Registriert seit: 14. Dez 2003
65 Beiträge
 
#1

SQL-statement - Logikproblem?

  Alt 3. Apr 2006, 21:07
Datenbank: DBISAM • Version: 4.21 • Zugriff über: Native
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
  Mit Zitat antworten Zitat
mquadrat

Registriert seit: 13. Feb 2004
1.113 Beiträge
 
Delphi XE2 Professional
 
#2

Re: SQL-statement - Logikproblem?

  Alt 4. Apr 2006, 08:55
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.
  Mit Zitat antworten Zitat
Emilio

Registriert seit: 14. Dez 2003
65 Beiträge
 
#3

Re: SQL-statement - Logikproblem?

  Alt 4. Apr 2006, 15:41
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.



VG
Emilio
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#4

Re: SQL-statement - Logikproblem?

  Alt 4. Apr 2006, 15:52
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.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Emilio

Registriert seit: 14. Dez 2003
65 Beiträge
 
#5

Re: SQL-statement - Logikproblem?

  Alt 4. Apr 2006, 19:53
Hi @all,

der Vorschlag von mquadrat ist doch der Beste und dazu der Richtige.
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 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 ...



Vielen herzlichen Dank für Deine/Eure Hilfe.

VG
Emilio
  Mit Zitat antworten Zitat
Antwort Antwort


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 22:11 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