Thema: Delphi Ersatz für DISTINCT ??

Einzelnen Beitrag anzeigen

TBx
(Administrator)

Registriert seit: 13. Jul 2005
Ort: Stadthagen
1.875 Beiträge
 
Delphi 12 Athens
 
#11

Re: Ersatz für DISTINCT ??

  Alt 3. Aug 2006, 23:11
Hallo Hansa,

versuch mal folgendes:

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 MWSTSATZ
        FROM MWST
        WHERE ABDATUM <= :ABDATUM
        GROUP BY MWSTSATZ /* GROUP BY statt SELECT DISTINCT verwendet, da GROUP BY indiziert arbeitet, DISTINCT nicht */
        INTO :MWSTSATZ_OUT
  DO /* fuer jeden bis :ABDATUM vorhandenen MWSTSATZ */
  BEGIN
    /* juengstes Aenderungsdatum ermitteln */
    SELECT max (ABDATUM)
      FROM MWST
      WHERE MWSTSATZ = :MWSTSATZ_OUT
        AND ABDATUM <= :ABDATUM
      INTO :ABDATUM_OUT;
    /* jetzt noch ID und Wert ermitteln */
    SELECT ID, MWSTWERT
      FROM MWST
      WHERE MWSTSATZ = :MWSTSATZ_OUT
        AND ABDATUM = :ABDATUM_OUT
      INTO :ID_OUT, :MWSTWERT_OUT;
    SUSPEND;
  END
end
Du solltest aus Geschwindigkeitsgründen in der Tabelle MWST Indexe auf
  • MWSTSATZ
  • MWSTWERT
  • ABDATUM
eingerichtet haben.

Des weiteren bin ich davon ausgegangen, dass es einen Unique über MWSTSATZ und ABDATUM gibt.
Ansonsten könnte die letzte select in der Procedure ein
multiple rows in a singelton select
hervorrufen.

Das Ganze ist runtergetippt und nicht getestet, da ich gerade keinen DB-Server am Laufen habe.
Bei Fehlfunktion bitte nachfragen.

Hope it helps

onlinekater
Thomas Breitkreuz
  Mit Zitat antworten Zitat