AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken [SQL] Wie Gruppensumme bilden?

[SQL] Wie Gruppensumme bilden?

Ein Thema von BlueStarHH · begonnen am 3. Mär 2021 · letzter Beitrag vom 10. Mär 2021
Antwort Antwort
Seite 3 von 3     123
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hannover-Hainholz
630 Beiträge
 
Delphi 10.3 Rio
 
#21

AW: [SQL] Wie Gruppensumme bilden?

  Alt 10. Mär 2021, 08:35
Es fehlt die Group by


SQL-Code:
execute block
as

begin
  for select
    substring(vp.ArtikelNr from 1 for 5) as Gruppe,
    vp.ArtikelNr as ArtikelNr,
    max(vp.Beschreibung) as Beschreibung,
    max(vp.Farbe) as Farbe,
    sum(vp.Menge) as Menge,
    sum(vp.NettoSumme) as NettoSumme
  from
    VorgangPos vp
  group by
    vp.ArtikelNr
    into :gruppe, :ArtikelNr, :Beschreibung, :Farbe, :Menge, :NettoSumme do
  begin
    for select sum(Menge) from VorgangPos where substring(ArtikelNr from 1 for 5) = Gruppe into :Gruppenmenge do suspend;
  end
end
Super, das läuft im IBExpert in etwas mehr als einer Sekunde durch! Das Ergebnis ist ja nun in einzelnen Variablen im Execute block. Nur wie kann ich das Ergebnis nun als Datenmenge in Delphi nutzen? Sorry für die dumme Frage, aber ich hab noch nie mit dem execute block gearbeitet. Wenn ich das ganze in eine SP packe, habe ich ja das selbe Problem oder nicht? Die SP kann ja keine Datenmenge aus mehreren Records zurückgeben oder doch?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.793 Beiträge
 
Delphi 10.4 Sydney
 
#22

AW: [SQL] Wie Gruppensumme bilden?

  Alt 10. Mär 2021, 09:07
Im Header der SP / execution block die Spalten für die Rückgabe deklarieren, diese werden dann durch das suspend zurückgegeben.

SQL-Code:
execute block
  returns(
   gruppe char(5), ...
  )
as
...
Markus Kinzler

Geändert von mkinzler (10. Mär 2021 um 09:10 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von IBExpert
IBExpert

Registriert seit: 15. Mär 2005
521 Beiträge
 
FreePascal / Lazarus
 
#23

AW: [SQL] Wie Gruppensumme bilden?

  Alt 10. Mär 2021, 11:06
und ergänzend zu mkinzler, wenn du da alle variablen als return parameter drin hast, kannst du bei naherzu jeder Query Komponente, die du auch für einen select benutzen kannst, die property sql mit dem execute block .... text füllen und mit open dann durch die datenmenge laufen.

und wenn es mal eine summe, aber auch mal keine summe geben könnte , dann geht noch folgende änderung

Code:
   
select sum(Menge) from VorgangPos where substring(ArtikelNr from 1 for 5) = Gruppe into :Gruppenmenge;
suspend;
damit würdest du auch einen record zur äußeren Hauptdatenmenge bekommen, wenn es gar keine details in VorgangPos gibt
(ist in diesem fall wegen dem Sum() nicht so wichtig, weil der immer genau einen record liefert, wen das die einzige spalte ist, aber wichtig ist das der "for select ... into" auf einer datenmenge die immer nur einen record liefert auch wenig sinnvoll.

und als logik: immer wenn dein quelltext in einem execute block oder auch in eine sp beim schlüsselwort suspend landet, wird das was in den return parametern steht als record erzeugt und kann damit in delphi bei der query mit while not eof und next ausgewertet werden

eine execute block muss auch gar noch zwingend auf einer datenmenge entstehen auch so was geht nämlich

Code:
execute block
returns (anz integer)
as
begin
 anz=1;
 suspend;
 anz=2;
 suspend;
end
auf dem weg kann man sehr komplexe ergebnisse zeilenweise und spaltenweise zusammenstellen, bei denen man mit einem sql statement abstruse verschachtelungen oder unions brauchen würde
Holger Klemt
www.ibexpert.com - IBExpert GmbH
Oldenburger Str 233 - 26203 Wardenburg - Germany
IBExpert and Firebird Power Workshops jederzeit auch als Firmenschulung
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +2. Es ist jetzt 04:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf