![]() |
AW: SQl Abfrage sehr langsam
Wenn das SUM(CASE..) nicht geht, werfe ich dann mal einen anderen Ansatz in den Ring:
SQL-Code:
select
tu.FahrerNr, b.Name, SUM(tu.VKBG) as Umsatz, SUM(tu1.VKBG) as Bar, SUM(tu2.VKBG) as Karte, SUM(tu3.VKBG) as LS from Tagesumsatz tu left join Fahrer b on b.Nr = tu.FahrerNr left join Tagesumsatz tu1 on tu.Zahlart = 1 and tu1.ID = tu.ID left join Tagesumsatz tu2 on tu.Zahlart = 2 and tu2.ID = tu.ID left join Tagesumsatz tu3 on tu.Zahlart = 3 and tu3.ID = tu.ID where tu.Datum between :EingabeDatumVon and :EingabeDatumBis group by tu.FahrerNr, b.Name |
AW: SQl Abfrage sehr langsam
Zitat:
Muss aber jeder selber wissen, warum man an Interbase festhält. |
AW: SQl Abfrage sehr langsam
Was genau geht nicht? Das erste SQL? Das zweite SQL? Das dritte SQL?
1. Beispiel geht, 2 und d3 nicht Ergeben alle einfach nur kein Ergebnis oder gibt es eine (oder mehrere) Fehlermeldung(en)? 2 und 3 Fehlermeldung: Unsuccessful execution caused by a system error that precludes successful execution of subsequent statements. Dynamic SQL Error. expression evaluation not supported. -------------------------------------------------------------- SQLCODE: -902 GDSCODE: 335544569 Wenn es Fehlermeldungen gibt, wie lauten sie? Im dritten SQL muss es am Anfang Name und nicht b.Name heißen. Dann läuft das SQL bei mir unter FireBird 3. Habe den Fehler oben behoben.[/QUOTE] |
AW: SQl Abfrage sehr langsam
Hallo in die Runde,
das Beispiel von Uwe Raabe läuft durch, birngt aber ein leeres Dataset. |
AW: SQl Abfrage sehr langsam
Bringt dies denn zumindest die erwarteten Daten?
SQL-Code:
select
tu.FahrerNr, b.Name, SUM(tu.VKBG) as Umsatz from Tagesumsatz tu left join Fahrer b on b.Nr = tu.FahrerNr where tu.Datum between :EingabeDatumVon and :EingabeDatumBis group by tu.FahrerNr, b.Name |
AW: SQl Abfrage sehr langsam
Wenn Uwes SQL funktioniert wäre mein nächster Versuch:
SQL-Code:
Wenn das beides weiterhin eine leere Ergebnismenge abliefern sollte, würd' ich's mal so probieren:
select
tu.FahrerNr, b.Name, tu.Zahlart, SUM(tu.VKBG) as Umsatz from Tagesumsatz tu left join Fahrer b on b.Nr = tu.FahrerNr where tu.Datum between :EingabeDatumVon and :EingabeDatumBis group by tu.FahrerNr, b.Name, tu.Zahlart order by tu.FahrerNr, b.Name, tu.Zahlart
SQL-Code:
Wenn es dann funktioniert haben wir bei der Übergabe der Datumswerte ein Problem, dem wir dann auf den Grund gehen müssen.
select
tu.FahrerNr, b.Name, tu.Zahlart, SUM(tu.VKBG) as Umsatz from Tagesumsatz tu left join Fahrer b on b.Nr = tu.FahrerNr where tu.FahrerNr = 12345 -- hier eine existierende Fahrernummer einfügen. group by tu.FahrerNr, b.Name, tu.Zahlart order by tu.FahrerNr, b.Name, tu.Zahlart |
AW: SQl Abfrage sehr langsam
Ergebnis Code Uwe Raabe:
12010 Hoffmann 132,40 12011 Wittberg 635,55 12012 Schmitt 536,15 usw. halt nur der gesamt Umsatz ohne unterteilung nach Zahlungsart. |
AW: SQl Abfrage sehr langsam
Ergebnisse von dir...
12010 Hoffmann 1 132,400 12011 Wittberg 1 259,750 12011 Wittberg 3 375,800 12012 Schmitt 1 155,650 12012 Schmitt 3 380,500 |
AW: SQl Abfrage sehr langsam
Funkitioniert das?
SQL-Code:
Wenn ja, dann bitte das probieren:
select
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 Tagesumsatz tu left join Fahrer b on b.Nr = tu.FahrerNr where tu.Datum between :EingabeDatumVon and :EingabeDatumBis order by tu.FahrerNr, b.Name, tu.VKBG
SQL-Code:
Wenn etwas nicht funktioniert bitte die Fehlermeldung posten.
select
tu.FahrerNr, b.Name, Sum(tu.VKBG) as Umsatz, Sum(case when tu.Zahlart = 1 then tu.VKBG else 0 end) as Bar, Sum(case when tu.Zahlart = 3 then tu.VKBG else 0 end) as Karte, Sum(case when tu.Zahlart = 2 then tu.VKBG else 0 end) as LS from Tagesumsatz tu left join Fahrer b on b.Nr = tu.FahrerNr where tu.Datum between :EingabeDatumVon and :EingabeDatumBis group by tu.FahrerNr, b.Name order by tu.FahrerNr, b.Name Wie war die Laufzeit der letzten beiden Versuche? Besser als beim ursprünglichen SQL oder eher ähnlich "langatmig"? |
AW: SQl Abfrage sehr langsam
Ich habe an meinem ursprünglichen Vorschlag eine kleine Änderung gemacht. Statt überall tu.Zahlart heißt es nun jeweils tu1.Zahlart usw.
SQL-Code:
select
tu.FahrerNr, b.Name, SUM(tu.VKBG) as Umsatz, SUM(tu1.VKBG) as Bar, SUM(tu2.VKBG) as Karte, SUM(tu3.VKBG) as LS from Tagesumsatz tu left join Fahrer b on b.Nr = tu.FahrerNr left join Tagesumsatz tu1 on tu1.Zahlart = 1 and tu1.ID = tu.ID left join Tagesumsatz tu2 on tu2.Zahlart = 2 and tu2.ID = tu.ID left join Tagesumsatz tu3 on tu3.Zahlart = 3 and tu3.ID = tu.ID where tu.Datum between :EingabeDatumVon and :EingabeDatumBis group by tu.FahrerNr, b.Name |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:28 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