AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi SQl Abfrage sehr langsam
Thema durchsuchen
Ansicht
Themen-Optionen

SQl Abfrage sehr langsam

Ein Thema von tkhandel · begonnen am 21. Jun 2024 · letzter Beitrag vom 27. Jun 2024
 
Delphi.Narium

Registriert seit: 27. Nov 2017
2.587 Beiträge
 
Delphi 7 Professional
 
#16

AW: SQl Abfrage sehr langsam

  Alt 26. Jun 2024, 12:45
Da in dem Select, das den Namen TU erhält, keine Zahlart enthalten ist, kann es auch keine tu.Zahlart geben.

In welcher Tabelle steht denn die Zahlart? Könntest Du uns bitte die Tabellendefinitionen zur Verfügung stellen. Ohne die ist es eine furchtbare Sucherei mit recht geringen Erfolgschancen.

Wenn Zahlart in der Tabelle Tagesumsatz steht, muss das innere SQL so aussehen:
SQL-Code:
    select -- Bitte hier alle Spalten aufführen, die aus der Tabelle Tagesumsatz benötigt werden
      FahrerNr,
      VKBG,
      Zahlart
    from Tagesumsatz
    where Datum between :EingabeDatumVon and :EingabeDatumBis
Vermutlich muss es dann mit demhier weitergehen:
SQL-Code:
 select -- FahrerNr, Name und Umsatz nach Zahlart separieren
    tu.FahrerNr,
    b.Name,
    tu.VKBG as Umsatz,
    case when tu.Zahlart = 1 then tu.VKBG else 0 end as Bar,
    case when tu.Zahlart = 3 then tu.VKBG else 0 end as Karte,
    case when tu.Zahlart = 2 then tu.VKBG else 0 end as LS
  from (
    select -- uns interessieren nur die Daten zum EingabeDatum
      FahrerNr,
      VKBG,
      Zahlart
    from Tagesumsatz
    where Datum between :EingabeDatumVon and :EingabeDatumBis
  ) TU
  -- nur die Fahrerdaten zum EingabeDatum dazu holen,
  -- anstatt zuerst alle Fahrerdaten zu beliebigem Datum zusammensuchen
  -- und dann erst die zum EingabeDatum zu separieren.
  left join Fahrer b on b.Nr = tu.FahrerNr
Die dritte Variante könnte dann dashier werden:
SQL-Code:
select -- Zuletzt die Summen je FahrerNr bilden
  FahrerNr,
  Name,
  Sum(Umsatz) as Umsatz,
  Sum(Bar) as Bar,
  Sum(Karte) as Karte,
  Sum(LS) as LS
from (
 select -- FahrerNr, Name und Umsatz nach Zahlart separieren
    tu.FahrerNr,
    b.Name,
    tu.VKBG as Umsatz,
    case when tu.Zahlart = 1 then tu.VKBG else 0 end as Bar,
    case when tu.Zahlart = 3 then tu.VKBG else 0 end as Karte,
    case when tu.Zahlart = 2 then tu.VKBG else 0 end as LS
  from (
    select -- uns interessieren nur die Daten zum EingabeDatum
      FahrerNr,
      VKBG,
      Zahlart
    from Tagesumsatz
    where Datum between :EingabeDatumVon and :EingabeDatumBis
  ) TU
  -- nur die Fahrerdaten zum EingabeDatum dazu holen,
  -- anstatt zuerst alle Fahrerdaten zu beliebigem Datum zusammensuchen
  -- und dann erst die zum EingabeDatum zu separieren.
  left join Fahrer b on b.Nr = tu.FahrerNr
) a
Group by
  FahrerNr,
  Name;

Geändert von Delphi.Narium (26. Jun 2024 um 23:25 Uhr) Grund: Schreibfehler, Syntaxfehler im dritten SQL behoben
  Mit Zitat antworten Zitat
 


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 +1. Es ist jetzt 01:19 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