Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL oder nicht SQL ... (https://www.delphipraxis.net/84029-sql-oder-nicht-sql.html)

Hansa 10. Jan 2007 16:50

Re: SQL oder nicht SQL ...
 
Doch, das geht schon. :mrgreen:

mschaefer 10. Jan 2007 17:32

Re: SQL oder nicht SQL ...
 
Mit welcher Version arbeitest Du denn (FB 5+) :mrgreen: ???

Hansa 10. Jan 2007 17:43

Re: SQL oder nicht SQL ...
 
Zitat:

Zitat von mschaefer
Mit welcher Version arbeitest Du denn (FB 5+) :mrgreen: ???

ne, bin schon bei FB V8.0. :mrgreen:

Denkanstoß :

SQL-Code:
SET TERM ^ ;

CREATE PROCEDURE MWSTSATZSP8 (
    mwstsatz smallint,
    datum date)
returns (
    mwstsatz_out decimal(15,2))
as
BEGIN
  SELECT FIRST 1 MWSTWERT FROM MWST8 WHERE
    (MWSTSATZ=:MWSTSATZ) AND (ABDATUM <= :DATUM)
  ORDER BY ABDATUM DESC INTO :MWSTSATZ_OUT;
  IF (MWSTSATZ_OUT IS NULL) THEN MWSTSATZ_OUT = 0;
  SUSPEND;
END^

SET TERM ; ^

smudo 11. Jan 2007 08:56

Re: SQL oder nicht SQL ...
 
Ich liebe Stored Procs :thumb:

Edit:
Hey, FB V8.0 ist schon raus? Muss ich gleich mal testen. :zwinker:

mschaefer 12. Feb 2007 12:14

Re: SQL oder nicht SQL ...
 
Moin, moin,

die Stored-Proc hat dann auch tatsächlich mit V2 gelaufen, aber Hansa ist ja einige Zeitzonen voraus.

GROUP BY - Frage die 3.

Da es oben schon um Group by ging mach ich jetzt keinen neuen Thread auf. Habe eine Abfrage auf eine Datei wo Umsätze per Monat ausgelesen werden sollen. Also etwas vereinfacht folgendes:

TABELLE "Umsatz" hat die Felder "Monat", "Umsatz"

SQL-Code:
SELECT
     SUM  (Umsatz) AS Monatsumsatz
    ,COUNT (Umsatz) AS Umsatzanzahl
     FROM Tabelle Umsatz
     GROUP BY Monat
Funktionier auch soweit, dass die Umsätze nach Monaten aufsummiert werden.

...
Jan 0 0 // erscheint leider nicht
...
Mai 7200 23
Juni 9400 34
Juni 12000 40
...

Wenn jetzt aber einen Monat kein Umsatz war, dann erscheint dieser Monat nicht in der Gruppe mit einer Nullzeile, sondern wird einfach ausgelassen. Kann man dieses der Abfrage abgewöhnen.

Grüße // Martin

mkinzler 12. Feb 2007 15:05

Re: SQL oder nicht SQL ...
 
Nur wenn du den Monat per Outer-Join hinzufügst

Hansa 12. Feb 2007 18:49

Re: SQL oder nicht SQL ...
 
Ich glaube eher, er meint einen Monat ohne Umsatz. Ist denn in der Tabelle dann überhaupt ein Monat hinterlegt ? :shock: Glaubs eher nicht. :zwinker:

mkinzler 12. Feb 2007 18:52

Re: SQL oder nicht SQL ...
 
Ja deshalb ja dazujoinen

alex517 12. Feb 2007 19:16

Re: SQL oder nicht SQL ...
 
Hallo Martin,

Zitat:

Zitat von mschaefer
Wenn jetzt aber einen Monat kein Umsatz war, dann erscheint dieser Monat nicht in der Gruppe mit einer Nullzeile, sondern wird einfach ausgelassen. Kann man dieses der Abfrage abgewöhnen.

Wenn keine "Monate" da sind, können auch keine in der Ergebnismenge auftauchen.
Aber man kann sich ja welche "basteln".

SQL-Code:
CREATE PROCEDURE SP_JJMM (
    VON_JJ INTEGER,
    VON_MM INTEGER,
    BIS_JJ INTEGER,
    BIS_MM INTEGER)
RETURNS (
    JAHR INTEGER,
    MONAT INTEGER)
AS
begin
  JAHR = VON_JJ;
  MONAT = VON_MM;
  WHILE (JAHR * 100 + MONAT <= BIS_JJ * 100 + BIS_MM) DO
  BEGIN
    suspend;
    MONAT = MONAT +1;
    if (MONAT > 12) THEN
    BEGIN
      MONAT = 1;
      JAHR = JAHR +1;
    END

  END
end
Dann hat man im Ergebnis auch den Monat:
SQL-Code:
SELECT
  JJMM.JAHR,
  JJMM.MONAT,
  COALESCE(SUM (U.BETRAG), 0) AS Monatsumsatz,
  COUNT (U.ID) AS Umsatzanzahl
FROM
  SP_JJMM(2005, 10, 2007, 5) JJMM
  left outer join Umsatz U on (U.JAHR = JJMM.JAHR and U.MONAT = JJMM.MONAT)
GROUP BY
  JJMM.JAHR,
  JJMM.MONAT


alex

Hansa 12. Feb 2007 19:22

Re: SQL oder nicht SQL ...
 
Jetzt mal langsam. Hierum gehts :

Zitat:

Zitat von Hansa
Ist denn in der Tabelle dann überhaupt ein Monat hinterlegt ?

Ich gehe von Betriebsferien im Juli und Aug. aus. Wär doch gut. :mrgreen:

Sieht die Tabelle nun so aus :

Delphi-Quellcode:
1  11,22
2  45,99
3  546,00
4  444,50
5  55,00 
6  9,55
7  0
8  0
9  2343,66 
...
oder so :

Delphi-Quellcode:
1  11,22
2  45,99
3  546,00
4  444,50
5  55,00 
6  9,55
9  2343,66 
...
Wollte den zweiten Fall ansprechen und nicht den ersten. Sind schon mal Betriebsferien, dann wird wohl keiner einmal im Monat trotzdem hingehen alles hochfahren und irgendwie den Monaten 7 und 8 in der DB sagen : Umsatz war alles 0. :mrgreen:

In einem solchen Fall würde ein Join nichts nützen. Martin, sage mal welcher der beiden Fälle der reale ist. Passt gut zur Ursprungsfrage : ersteren würde ich mit SQL lösen, den zweiten nicht.

Ah, Alex. Muss ich in Ruhe mal angucken. Das hier bleibt trotzdem jetzt so stehen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:08 Uhr.
Seite 2 von 3     12 3      

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