![]() |
Datenbank: FB • Version: 2.0 • Zugriff über: FIBplus
Ersatz für DISTINCT ??
Hi,
Bin etwas am testen. Rückgabe einer stored Procedure liefert folgendes :
Delphi-Quellcode:
Die SP sieht so aus :
ID_OUT MWSTSATZ_OUT ABDATUM_OUT MWSTWERT_OUT
4 0 01.01.1900 0 2 1 01.01.1980 7 5 2 01.01.1980 15 1 2 01.04.1998 16 3 2 01.01.2007 19
SQL-Code:
Siehe die letzten 3 Zeilen der Beispieldaten. Da steht jetzt 15,16,19, aber ich brauche nur den einen Wert, der zum Input-Parameter paßt. Das ist sicherlich einfach einzubauen, bloß wie ? :mrgreen:
CREATE PROCEDURE ERMITTLE_ALLEMWSTSP (
ABDATUM DATE) RETURNS ( ID_OUT INTEGER, MWSTSATZ_OUT INTEGER, ABDATUM_OUT DATE, MWSTWERT_OUT DECIMAL(15,2)) AS begin FOR SELECT ID,MWSTSATZ,ABDATUM, MWSTWERT FROM MWST WHERE ABDATUM <= :ABDATUM ORDER BY MWSTSATZ INTO :ID_OUT,:MWSTSATZ_OUT,:ABDATUM_OUT,:MWSTWERT_OUT DO SUSPEND; end^ |
Re: Ersatz für DISTINCT ??
Hi,
in einem Statement ist es wohl nicht zu machen. Ich würde es etwa so lösen:
SQL-Code:
Cu, Frank
CREATE PROCEDURE ERMITTLE_ALLEMWSTSP (
abdatum date) returns ( id_out integer, mwstsatz_out integer, abdatum_out date, mwstwert_out numeric(15,2)) as begin for select distinct(mwstsatz) from mwst order by mwstsatz into :mwstsatz_out do begin select max(abdatum) from mwst where mwstsatz = :mwstsatz_out and abdatum <= :abdatum into :abdatum_out; select id, mwstwert from mwst where mwstsatz = :mwstsatz_out and abdatum = :abdatum_out into :id_out, :mwstwert_out; suspend; end end |
Re: Ersatz für DISTINCT ??
Ich arbeite zwar nicht mit FB; aber kennt dies keinen Befehl wie MAX?
Was möchtest Du denn haben? Den höchsten MwSt-Satz der ab einem bestimmten Datum zulässig ist? Das kann aber so wie es in deiner Tabelle steht doch nicht sein oder? Ein MwSt Satz ist solange güglich bis es einen neuen gibt. Du musst also eine Abrage machen welche Dir für ein Datum den geltenden Mehrwertsteuersatz liefert. Alles andere ist doch eher ein Fehler in der Logik. Oder verstehe ich das jetzt falsch? |
Re: Ersatz für DISTINCT ??
Zitat:
Aber man sollte sich wohl doch vorsichtshalber am Datum orientieren. Frank |
Re: Ersatz für DISTINCT ??
Hallo Hansa,
du machst dir das Leben unnötig schwer, indem du die Steuersätze einzeln speicherst. Bei der Novellierung des Umsatzsteuergesetzes wird der ermäßigte Steuersatz auch dann neu geregelt, wenn sich der Wert gar nicht ändert. Du könntest also guten Gewissens beide Steuersätze unter dem gleichen Wirk-Datum speichern und dann einfach per
SQL-Code:
den relevanten Eintrag lokalisieren - um noch eine Alternative zu Franks MAX() Funktion zu bringen.
SELECT FIRST 1 ... WHERE WHERE ABDATUM <= :ABDATUM ORDER BY ABDATUM DESC
Grüße vom marabu |
Re: Ersatz für DISTINCT ??
MAX ? Natürlich gibts das. Aber nützt das was ? :gruebel: Aber nochmals : ich habe einige Datensätze. Die 7 % wurden bei der Erhöhung von 15 auf 16 % z.B. NICHT erhöht. Insofern habe ich für 16 % (siehe Bsp.) 3 Datensätze. Für 0 oder 7 nur einen. Ich brauche nun z.B. die von heute, den 3.8.2006 und zwar für alle 3 (0,7,16). Ich brauche nicht den 19% Satz ab 1.1.2007. Ist 2007 erreicht, dann soll die SP allerdings 19 zurückliefern und nicht mehr 16.
P.S.: Für Kommentare über die dämlichen Dilletanten jegliche Coleur, die lediglich unser Geld verprassen bitte separaten Thread aufmachen. :mrgreen: |
Re: Ersatz für DISTINCT ??
Zitat:
|
Re: Ersatz für DISTINCT ??
Unter der Voraussetzung, daß es mind. 3 Sätze gibt, geht es so :
SQL-Code:
Problem scheint also tatsächlich auf den Kern reduziert. Oder sieht jemand noch einen Fehler ?
CREATE PROCEDURE ERMITTLE_ALLEMWSTSP (
ABDATUM DATE) RETURNS ( MWSTSATZ_OUT INTEGER, MWSTWERT_OUT DECIMAL(15,2)) AS begin FOR SELECT FIRST 3 MWSTSATZ, MWSTWERT FROM MWST WHERE ABDATUM <= :ABDATUM ORDER BY MWSTSATZ,ABDATUM DESC INTO :MWSTSATZ_OUT,:MWSTWERT_OUT DO SUSPEND; end^ |
Re: Ersatz für DISTINCT ??
Nur wenn du alle überflüssigen weil ungeänderten Werte - insbesondere den überflüssigen mit 0 - auch bei jeder Gesetzesänderung speicherst geht das hier:
SQL-Code:
Aber wie ich schon schrieb machst du dir das Leben unnötig schwer.
... ORDER BY ABDATUM DESC, MWSTSATZ ...
Gute Nacht marabu |
Re: Ersatz für DISTINCT ??
Marabu, es geht um alle zu einem gegebenen Datum gültigen. Das sind jetzt eben 0,7,16. Ab 1.1. sind es 0,7,19. Wegen alter Sachen 2006 brauche ich den mit 16 bis 2006 trotzdem noch ! D.h., es liegen mit 0 und 7 nur ein Datensatz vor, für den Mwstsatz 2 aber 2 ! Ich test ja sogar noch mit 15 %, das wären 3. Der Code geht schon so. Ich kriege mit First 3 immer die richtigen drei Werte. Jetzt eben 0,7,16. Gebe ich für den Parameter 1.1.2007 ein, dann kommt 0,7,19. Was soll ich da noch wie vereinfachen ? :shock:
Stop ! Jetzt ich Kapito. :mrgreen: Du meinst direkt 3 integers für einen Datensatz ? Oh je. :gruebel: Brauche z.B. für Belgien : 0 3 6,5 12 und 19. Und was wäre wenn zum 1.1.2008 festgestellt wird, daß schon wieder zu viel Geld verprasst wird und man sich entschließt, nur die 7 auf 8 % anzuheben ? :wall: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:35 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 by Thomas Breitkreuz