Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   count mit 0 (https://www.delphipraxis.net/187205-count-mit-0-a.html)

jobo 9. Nov 2015 10:44

AW: count mit 0
 
Zitat:

Zitat von p80286 (Beitrag 1320909)
@jobo ist das eine Möglichkeit aus der Kiste "So geht's auch"? scheint mir ein bißchen Umständlich liefert aber das richtige Ergebnis.

Ja, wie Du festgestellt hast, es geht auch. :)
Der Grundgedanke ist: Wenn ich sowie alle "Abteilungen" oder was auch immer anzeigen muss(!), hab ich an der Stelle eh einen Fullscan (oder sowas in der Art, falls "alle Abteilungen" ein Zwischenergebnis aus einem View oder Subselect sind). Wenn das also stattfindet, kann ich die engine "unterwegs" an der Stelle direkt mitrechnen lassen, statt erneut diejenige Untermenge anzuflanschen und zu zählen, die mich am Ende interessiert.
So wird ein 2. Scan, Range/Hash was auch immer vermieden.

Ich hab mir nicht die Mühe gemacht, die Statements zu testen, aber auf die ein oder andere Art müssen auch die anderen Statements ihre Grundmenge irgendwo herbekommen und zwar unconditional und mglw auch ohne verfügbar Indizierung. Schau Dir den Ausführungsplan der Varianten an- falls es überhaupt eine Rolle spielt. Ich denke meine Variante dürfte da relativ übersichtlich sein.
Wenn Dein Originalstatement sehr komplex ist, sind die Unterschiede der Ausführungspläne ggF. schwer zu vergleichen, wenn dann noch die Datenmenge groß ist, bietet sich als erstes ein Blick auf die Laufzeit an. Das schnellste gewinnt.

Das Case When sieht natürlich nicht hübsch aus, die Lösung ist einfach straight forward. Die guten ins Töpfchen, die schlechten ..

p80286 9. Nov 2015 14:49

AW: count mit 0
 
Zitat:

Zitat von jobo (Beitrag 1320917)
.. bietet sich als erstes ein Blick auf die Laufzeit an. Das schnellste gewinnt.

Jo, so sehe ich das auch erst einmal.
Was gewöhnungsbedürftig ist, daß auf den ersten Blick nicht gezählt wird was man zählen will. Da muß man sich erst einmal etwas bei denken:mrgreen:

Gruß
K-H

Dejan Vu 10. Nov 2015 06:54

AW: count mit 0
 
In meinen Tabellen habe ich selten eine 'Abteilung', sondern eigentlich immer nur einen FK auf eine separate Tabelle 'Abteilungen', das ist ja normal. Ergo habe ich bereits eine Tabelle aller Abteilungen.

Weiterhin habe ich 'Auswertungsgruppen'. Dort lege ich ab, welche Abteilungen (Produkte, Personen, egal) zusammengefasst werden sollen. So habe ich z.B. eine Auswertungsgruppe 'Alle aktiven Abteilungen', oder 'Meine Top-Produkte' oder 'Personen aus dem 3.Stock'.

Nun kann ich über diese Gruppen beliebige Auswertungen fahren, sodaß immer alle Mitglieder dieser Gruppe in den Auswertungen auftauchen, auch wenn noch keine Daten angefallen sind.

Code:
select A.Name,
       coalesce (sum (d.Irgendwas), 0) as Ergebnis
  from Abteilungsgruppe Ag
       join Abteilung A on Ag.AbteilungsID = A.ID
       left join Daten d on d.AbteilungsID = A.ID
 where d.Datum between :Start and :Ende
   and Ag.ID = 23 --  23 sei jetzt mal die GruppenID der Gruppe 'Alle aktiven Abteilungen'
Und nun kann ich einfach den Zeitraum und die Auswertungsgruppe parametrieren und dann habe ich einen Report, der mir für jeden beliebigen Zeitraum und jede beliebige Abteilungsgruppe eine Auswertung liefert.

Über Trigger in der Auswertungsgruppe kann ich zudem steuern, ob (und ggf das) eine Abteilung nur in einer Gruppe sein darf oder nicht.

Wenn ich dieses Pattern auf alle meine Daten lege, stellen sich mir diese Fragen hier gar nicht mehr, weil alle meine Reports automatisch schon all das anzeigen, was gewünscht ist. Und da die Auswertungsgruppen vom Kunden editierbar sind, kann er sich seine Abteilungsauswertungen auch beliebig zusammenstellen. Und ja: Natürlich gibt es noch Auswertungen je Tag und über alle Gruppen (Achtung! Wenn Gruppen nicht disjunkt sind, stimmt die Summe nicht).


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:27 Uhr.
Seite 2 von 2     12   

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