![]() |
Datenbank: Interbase • Version: 2020 • Zugriff über: Delphi 12
2x Sum aus gleichem Feld unterschiedliche Bedingung
Hallo,
ich bräuchte mal einen Ansatz für das folgende Abfrage Problem eine Tabelle (TagesUmsatz) enthält alle Verkäufe eines Tages: Id, MitarbeiterNr, Datum, UmsatzBrutto, Zahlart Ergebnis soll sein: MitarbeiterNr, Umsatz, Bar, Karte folgende Abfrage Select FahrerNr, Sum(VKBG) as Umsatz from Tagesumsatz where cast(Datum as Date) = '06.05.2024' Group by FahrerNr UNION Select FahrerNr, Sum(VKBG) as Bar from Tagesumsatz where cast(Datum as Date) = '06.05.2024' and Zahlart = 3 Group by FahrerNr liefert zwar das Ergebnis aber nicht zwei Spalten sondern untereinander was bei vielen fahreren zu unübersichtlich wird, wie bekomme ich die nebeneinander ? |
AW: 2x Sum aus gleichem Feld unterschiedliche Bedingung
|
AW: 2x Sum aus gleichem Feld unterschiedliche Bedingung
Zitat:
man könnte damit versuchen eine Liste aus Mitarbeiter ID, Zahlart und Betrag zu erzeugen, aber eine Liste mit MitarbeiterID, Summe Bar, Summe Karte? Da fehlt mir noch ein bisschen der Ansatz. Grüße TurboMagic |
AW: 2x Sum aus gleichem Feld unterschiedliche Bedingung
Das wäre mein Ansatz:
Code:
Natürlich ungeprüft.
Select
FahrerNr, (Select Sum(VKBG) from Tagesumsatz x where x.FahrerNr = TU.FahrerNr and cast(Datum as Date) = '06.05.2024') as UmsatzGesamt, (Select Sum(VKBG) from Tagesumsatz x where x.FahrerNr = TU.FahrerNr and cast(Datum as Date) = '06.05.2024' and Zahlart = 3) as UmsatzZA3 from Tagesumsatz TU Group by FahrerNr Außerdem ist es meistens ungünstig, die DB-Felder zu CASTen, da dadurch der Index nicht mehr genutzt werden kann. Es ist i.d.R. besser, den Parameter zu CASTen. |
AW: 2x Sum aus gleichem Feld unterschiedliche Bedingung
Du hast bei Zugriff Delphi 12 angegeben. Das sagt aber noch nichts über die verwendeten Zugriffskomponenten (z.B. FireDAC, IBDAC, IBExpress...) aus.
|
AW: 2x Sum aus gleichem Feld unterschiedliche Bedingung
Mit einem SQL-Server würde ich das so machen; keine Ahnung, ob das auch mit Interbase geht:
Code:
Select
FahrerNr, Sum(VKBG) as Umsatz, SUM(CASE WHEN Zahlart=3 THEN VKNG ELSE 0 END) AS Bar from Tagesumsatz where cast(Datum as Date) = '06.05.2024' Group by FahrerNr |
AW: 2x Sum aus gleichem Feld unterschiedliche Bedingung
Zitat:
|
AW: 2x Sum aus gleichem Feld unterschiedliche Bedingung
Zitat:
warum aber eigenlich
Code:
? Wenn Datum als Date in der Datenbank angelegt ist, sollte ein
cast(Datum as Date) = '06.05.2024'
Code:
reichen. Oder noch besser: man verwendet Parameter. Wie schon geschrieben wurde, ist das auch wichtig für die Nutzung eines Indexes.
Datum = '06.05.2024'
|
AW: 2x Sum aus gleichem Feld unterschiedliche Bedingung
Vielleicht ist es ein DateTime-Feld mit Uhrzeit drin.
|
AW: 2x Sum aus gleichem Feld unterschiedliche Bedingung
Der Ansatz von Jasocul war genau das was ich wollte also besten Dank für die Unterstützung!!
|
AW: 2x Sum aus gleichem Feld unterschiedliche Bedingung
Zitat:
|
AW: 2x Sum aus gleichem Feld unterschiedliche Bedingung
Zitat:
Außerdem sollte das SQL von Papaschlumpf73 performanter sein... Ich kenn das, man testet mit einer "kleinen" Datenbank, alles perfekt und der Kunde verflucht dann die Performance... |
AW: 2x Sum aus gleichem Feld unterschiedliche Bedingung
Die vollständige Anweisung sähe in etwa so aus (Zahlart ist leider noch etwas vage beschrieben, daher nehme ich alles <> 3 als Karte):
SQL-Code:
select
FahrerNr as MitarbeiterNr, Sum(VKBG) as Umsatz, SUM(CASE WHEN Zahlart=3 THEN VKNG ELSE 0 END) AS Bar, SUM(CASE WHEN Zahlart<>3 THEN VKNG ELSE 0 END) AS Karte from Tagesumsatz where cast(Datum as Date) = '06.05.2024' Group by FahrerNr |
AW: 2x Sum aus gleichem Feld unterschiedliche Bedingung
Hallo Uwe,
Zahlart ist eine int Bar = 1, LS = 2, Karte = 3 da bekomme in deiner variante die Fehlermeldung: Error at line 1 expression evaluation not supported |
AW: 2x Sum aus gleichem Feld unterschiedliche Bedingung
Zitat:
Zitat:
SQL-Code:
select
FahrerNr as MitarbeiterNr, Sum(VKBG) as Umsatz, SUM(CASE Zahlart WHEN 1 THEN VKNG ELSE 0 END) AS Bar, SUM(CASE Zahlart WHEN 2 THEN VKNG ELSE 0 END) AS LS, SUM(CASE Zahlart WHEN 3 THEN VKNG ELSE 0 END) AS Karte from Tagesumsatz where cast(Datum as Date) = '06.05.2024' Group by FahrerNr |
AW: 2x Sum aus gleichem Feld unterschiedliche Bedingung
ja das stimmt Uwe, wollte nur schnell das Problem schildern
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:01 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