![]() |
Datenbank: ABS DB • Zugriff über: DBManager
Was ist an diesem Statement falsch?
Wieso mag ABS DB die letzte Zeile nicht? Bin ich betriebsblind?
SQL-Code:
Ich möchte doch nur den MwSt-Satz ermitteln, der zum Zeitpunkt des Belegdatums gültig war. Entferne ich den Kommentar, erhalte ich die Fehlermeldung Search condition is not applicable - Native error: 30144. Lasse ich den Kommentar so, wie er oben ist, erhalte ich immer den aktuellsten Satz ohne Berücksichtigung des Belegdatums :wall:
SELECT C.Bezeichnung AS Artikel,C.Preis AS Einzelpreis,B.Menge AS Menge,D.Wert AS 'MwSt %',
(C.Preis * B.Menge) AS 'Gesamt Netto',(C.Preis * (1 + D.Wert / 100) * Menge) AS 'Gesamt Brutto' FROM Beleg A JOIN BelegPos B ON B.Beleg_id = A.Id JOIN Artikel C ON C.Id = B.Artikel_id JOIN MwStSatz D ON D.Gruppe_ID = C.MwStGruppeId WHERE A.Id = 1 AND D.gueltig_seit = (SELECT MAX(M.gueltig_seit) AS aktuell FROM MwStSatz M WHERE M.Gruppe_ID = D.Gruppe_ID) --AND M.gueltig_seit <= A.Datum) [edit] So hätte ich es gerne, wird aber wie gesagt moniert:
SQL-Code:
[/edit]
SELECT C.Bezeichnung AS Artikel,C.Preis AS Einzelpreis,B.Menge AS Menge,D.Wert AS 'MwSt %',
(C.Preis * B.Menge) AS 'Gesamt Netto',(C.Preis * (1 + D.Wert / 100) * Menge) AS 'Gesamt Brutto' FROM Beleg A JOIN BelegPos B ON B.Beleg_id = A.Id JOIN Artikel C ON C.Id = B.Artikel_id JOIN MwStSatz D ON D.Gruppe_ID = C.MwStGruppeId WHERE A.Id = 1 AND D.gueltig_seit = (SELECT MAX(M.gueltig_seit) AS aktuell FROM MwStSatz M WHERE M.Gruppe_ID = D.Gruppe_ID AND M.gueltig_seit <= A.Datum) |
Re: Was ist an diesem Statement falsch?
Weil der Alias M außerhalb des Subselects unbekannt ist.
|
Re: Was ist an diesem Statement falsch?
Nee, das ist es nicht. Die letzte Klammer vor dem Kommentar ist noch vom C & P übrig geblieben, dafür soll der Kommentar entfernt werden, dessen Klammer gilt.
|
Re: Was ist an diesem Statement falsch?
Versuch mal
SQL-Code:
AND MAX(M.gueltig_seit) <= A.Datum)
|
Re: Was ist an diesem Statement falsch?
Dieselbe Fehlermeldung. Der Subselect alleine wird auch anstandslos ausgeführt, ich versteh so langsam die Welt nicht mehr.
|
Re: Was ist an diesem Statement falsch?
Schon mit HAVING satt WHERE versucht (wegen Gruppierung) oder eine sortierete limitiertung Abfrage
|
Re: Was ist an diesem Statement falsch?
Gruppierung mit HAVING hab ich auch schon durch. Mir fehlt lediglich der Vergleich mit dem Belegdatum, dann ist das Ding eingetütet.
|
Re: Was ist an diesem Statement falsch?
Unterstützt ABS Limitierung?
|
Re: Was ist an diesem Statement falsch?
Weiß ich nicht, ich habe es erst vor 3 Stunden installiert :oops:
|
Re: Was ist an diesem Statement falsch?
Klappt es vielleicht so?
SQL-Code:
Eventuell mag ABS den Verweis auf einen Alias außerhalb des Subselects nicht, was ich aber auch nicht so recht glauben kann :gruebel:
SELECT C.Bezeichnung AS Artikel,C.Preis AS Einzelpreis,B.Menge AS Menge,D.Wert AS 'MwSt %',
(C.Preis * B.Menge) AS 'Gesamt Netto',(C.Preis * (1 + D.Wert / 100) * Menge) AS 'Gesamt Brutto' FROM Beleg A JOIN BelegPos B ON B.Beleg_id = A.Id JOIN Artikel C ON C.Id = B.Artikel_id JOIN MwStSatz D ON D.Gruppe_ID = C.MwStGruppeId WHERE A.Id = 1 AND D.gueltig_seit = (SELECT MAX(M.gueltig_seit) AS aktuell FROM MwStSatz M, Beleg A1 WHERE M.Gruppe_ID = D.Gruppe_ID AND M.gueltig_seit <= A1.Datum AND A1.ID = 1) |
Re: Was ist an diesem Statement falsch?
Zitat:
[edit] Mit Deinem Statement bekomme ich zwar ein Ergebnis, aber eine Position wird unterschlagen :wall: [/edit] |
Re: Was ist an diesem Statement falsch?
Erweitere die Abfrage auf A mal um das Datumsfeld
|
Re: Was ist an diesem Statement falsch?
Zitat:
|
Re: Was ist an diesem Statement falsch?
Die Tabelle MwStSatz sieht so aus:
SQL-Code:
CREATE TABLE MwStSatz (
gueltig_seit DATE NOT NULL, Gruppe_ID INTEGER NOT NULL, Wert FLOAT NOT NULL, PRIMARY KEY IndexName (Gruppe_ID, Wert, gueltig_seit) ); |
Re: Was ist an diesem Statement falsch?
Warum ist der Wert Teil des Primärschlüssels?
@Dax: was ist mit deinem Profil los? |
Re: Was ist an diesem Statement falsch?
Zitat:
|
Re: Was ist an diesem Statement falsch?
Zitat:
Zitat:
|
Re: Was ist an diesem Statement falsch?
Das scheint mir auch bald so, dass ABS mit so "komplexen" Statements nicht richtig umgehen kann.
|
Re: Was ist an diesem Statement falsch?
Ich vermute mal, es liegt am falschen PK(Index) nimm mal Wert raus
|
Re: Was ist an diesem Statement falsch?
Schon geschehen, keine Besserung :?
|
Re: Was ist an diesem Statement falsch?
Zitat:
mfg. ggg |
Re: Was ist an diesem Statement falsch?
Subselect sollte aber nur einen Wert zurückliefern, dann wäre in nicht unbedingt notwendig, aber schaden kann es natürlich nicht.
|
Re: Was ist an diesem Statement falsch?
Na gut, in Anbetracht dessen, dass ich das hier nur für jemand anderen zur Verdeutlichung der Mehrwertsteuer-Problematik mache, habe ich jetzt keine Lust mehr, mich noch weiter zu ärgern. Dann muss man halt im ersten Schritt den jeweils aktuellen Prozentsatz je Gruppe ermitteln und daraus dann am Frontend ein entsprechendes zweites Statement zusammenbasteln (obwohl ich sowas hasse).
P.S.: Mit IN hab ich auch schon experimentiert, bringt auch nix. |
Re: Was ist an diesem Statement falsch?
Zitat:
|
Re: Was ist an diesem Statement falsch?
Zitat:
|
Re: Was ist an diesem Statement falsch?
tja, nach ANSI SQL ist das jedenfalls nicht erlaubt. ist möglich, dass dies die lokale datenbank unterstützt, aber darauf sollte man sich normal nicht verlassen. wie gesagt es gibt verschiedene statemens, welche subselects unterstützen.. IN, IS EXISTS, ANY, SOME ...
und noch 'n schönen abend PS: teilweise wissen auch die datenbank hersteller nichtgenau was sie machen... ;-) . daher mal im handbuch nachsehen ... :-) |
Re: Was ist an diesem Statement falsch?
Zitat:
|
Re: Was ist an diesem Statement falsch?
N'Abend!
Lass doch mal das hier überflüssige
SQL-Code:
aus dem Subselect raus.
AS aktuell
Ich würde die Fehlermeldung dahingehend interpretieren, dass er das Feld nicht kennt, kennt ABS Feldnamen womöglich nicht mehr, sobald man einen Alias draufgelegt hat? Ist vielleicht ja nen Versuch Wert. Gruß onlinekater |
Re: Was ist an diesem Statement falsch?
Danke für die vielen Vorschläge. Ich habe es mittlerweile so gelöst wie in #23 angedeutet. Ist zwar nicht schön, funktioniert aber.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12: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