![]() |
Re: SQL oder nicht SQL ...
Doch, das geht schon. :mrgreen:
|
Re: SQL oder nicht SQL ...
Mit welcher Version arbeitest Du denn (FB 5+) :mrgreen: ???
|
Re: SQL oder nicht SQL ...
Zitat:
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 ; ^ |
Re: SQL oder nicht SQL ...
Ich liebe Stored Procs :thumb:
Edit: Hey, FB V8.0 ist schon raus? Muss ich gleich mal testen. :zwinker: |
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:
Funktionier auch soweit, dass die Umsätze nach Monaten aufsummiert werden.
SELECT
SUM (Umsatz) AS Monatsumsatz ,COUNT (Umsatz) AS Umsatzanzahl FROM Tabelle Umsatz GROUP BY Monat ... 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 |
Re: SQL oder nicht SQL ...
Nur wenn du den Monat per Outer-Join hinzufügst
|
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:
|
Re: SQL oder nicht SQL ...
Ja deshalb ja dazujoinen
|
Re: SQL oder nicht SQL ...
Hallo Martin,
Zitat:
Aber man kann sich ja welche "basteln".
SQL-Code:
Dann hat man im Ergebnis auch den Monat:
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
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 |
Re: SQL oder nicht SQL ...
Jetzt mal langsam. Hierum gehts :
Zitat:
Sieht die Tabelle nun so aus :
Delphi-Quellcode:
oder so :
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 ...
Delphi-Quellcode:
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:
1 11,22
2 45,99 3 546,00 4 444,50 5 55,00 6 9,55 9 2343,66 ... 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 03:17 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