Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Ersatz für DISTINCT ?? (https://www.delphipraxis.net/74472-ersatz-fuer-distinct.html)

Hansa 3. Aug 2006 17:31

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:
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
Die SP sieht so aus :

SQL-Code:
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^
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:

dataspider 3. Aug 2006 18:04

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:
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
Cu, Frank

Sharky 3. Aug 2006 18:10

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?

dataspider 3. Aug 2006 18:14

Re: Ersatz für DISTINCT ??
 
Zitat:

Zitat von Sharky
Ich arbeite zwar nicht mit FB; aber kennt dies keinen Befehl wie MAX?

Solange man sich auf die Politiker wenigstens dahingehend verlassen kann, dass Märchensteuer immer erhöht und nicht gesenkt wird, kann man auch ein Statement und max nehmen. :wink:

Aber man sollte sich wohl doch vorsichtshalber am Datum orientieren.

Frank

marabu 3. Aug 2006 18:17

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:
SELECT FIRST 1 ... WHERE WHERE ABDATUM <= :ABDATUM ORDER BY ABDATUM DESC
den relevanten Eintrag lokalisieren - um noch eine Alternative zu Franks MAX() Funktion zu bringen.

Grüße vom marabu

Hansa 3. Aug 2006 18:40

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:

mkinzler 3. Aug 2006 18:49

Re: Ersatz für DISTINCT ??
 
Zitat:

MAX ? Natürlich gibts das. Aber nützt das was ?
Könnte helfen denn du bekommst ja den grrößte datum, welches kleiner/gleich wie das heutige Datum ist.

Hansa 3. Aug 2006 19:33

Re: Ersatz für DISTINCT ??
 
Unter der Voraussetzung, daß es mind. 3 Sätze gibt, geht es so :

SQL-Code:
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^
Problem scheint also tatsächlich auf den Kern reduziert. Oder sieht jemand noch einen Fehler ?

marabu 3. Aug 2006 20:25

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:
... ORDER BY ABDATUM DESC, MWSTSATZ ...
Aber wie ich schon schrieb machst du dir das Leben unnötig schwer.

Gute Nacht

marabu

Hansa 3. Aug 2006 21:23

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:52 Uhr.
Seite 1 von 3  1 23      

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