![]() |
Datenbank: oracle • Version: 11 • Zugriff über: egal
count mit 0
hallo zusammen,
der Titel ist u.U. wenig aussagekräftig, darum versuche ich das mal zu beschreiben. Ich habe eine Abfrage in der ich Zähle:
SQL-Code:
funktioniert auch gut, es gibt nur ein Problem, wenn es im Zeitraum,in einer Abteilung keinen Gegenstand gibt, gibt es keine Ergebniszeile in der Ausgabe, mein Chef möchte aber wissen, das es nichts gibt
select Abteilung,Gegenstand,count(key)
from tt where zeit between(startdate,eddate) group by Abteilung,Gegenstand z.B.
Code:
und nicht
Einkauf Anforderungen 128
Verkauf Aufträge 12 Lager Eingänge 0 Personalabteilung Kündigungen 12
Code:
Wie erreiche ich das?
Einkauf Anforderungen 128
Verkauf Aufträge 12 Personalabteilung Kündigungen 12 Gruß K-H Nachtrag: ein Kollege hat mir über die Schulter geschaut und was von NVL und Coalesce gemurmelt, aber geht das denn? Mir fehlt doch der ganze Satz und nicht nur ein Feld? |
AW: count mit 0
Wenn du den Zeitraum filterst und in dem Zeitraum nichts ist, kriegste auch nix. Du musst erstmal einen Distinct Select über alle Abteilungen/Gegenstände machen und dass dann z.B. mit dem bisherhigen Joinen. Oder einen Subselect machen, aber vllt. langsamer:
Code:
Select Distinct Abteilung, Gegenstand,
(Select count(*) from tt where Abteilung=tt1.Abteilung and Gegenstand=tt1.Gegensand) as Anzahl from tt as tt1 |
AW: count mit 0
Jumpys Lösung sollte bereits funktionieren. Aus der Hüfte geschossen wäre folgende Variante auch möglich:
Code:
//bzw. ohne das "as", ist ja Oracle
SELECT LagerGegenstand.Abteilung, LagerGegenstand.Gegenstand, count(*)
FROM (SELECT DISTINCT Abteilung, Gegenstand FROM tt) as LagerGegenstand LEFT JOIN tt ON (LagerGegenstand.Abteilung = tt.Abteilung AND LagerGegenstand.Gegenstand = tt.Gegenstand AND tt.zeit between(startdate,eddate)) GROUP BY LagerGegenstand.Abteilung, LagerGegenstand.Gegenstand; |
AW: count mit 0
Solche "Spielereien" Oracle ich in der Regel so in der Art:
SQL-Code:
select Abteilung, Gegenstand, Sum(Anzahl) as Anzahl from (
select Abteilung, Gegenstand, count(key) as Anzahl from tt where zeit between(startdate,eddate) group by Abteilung, Gegenstand union all select disitinct Abteilung, Gegenstand, 0 as Anzahl from tt ) group by Abteilung, Gegenstand |
AW: count mit 0
Du müsstest eine Tabelle aller Abteilungen und Gegenstände haben (wenn du auch 0-Werte für die Gegenstände haben willst).
Bleiben wir mal bei Abteilungen. Dann machst Du ein LEFT JOIN deiner Abteilungen auf deine Auswertung und bekommst so automatisch alle Abteilungen und -falls Daten vorhanden sind- eben auch Werte. Wenn nicht, dann steht da NULL, aber das kannst du dann ja auf 0 ändern. So z.B.:
SQL-Code:
Jumpy's Lösung ist auch cool, würde aber etwas länger dauern, wenn in TT sehr viele Zeilen sind und kein Index auf der Abteilung/Gegenstand ist. Dann muss er ja vorher die gante Tabelle abgrasen, um alle Abteilungen zu bekommen. Außerdem (mecker mecker) funktioniert das nicht, wenn eine Abteilung X, die angezeigt werden soll, bisher noch keine Werte hat.
select A.Abteilung,
S.Gegenstand, Count(S.Key) from AlleAbteilungen A left join tt s on A.Abteilung = s.Abteilung where zeit between(startdate,eddate) group by s.Abteilung,s.Gegenstand |
AW: count mit 0
und noch eins:
Code:
Macht garantiert einen full scan (aber nicht mehr), eignet sich wohl am ehesten, wenn eh keine Indizes auf den abgefragten Feldern sind und die anderen Vorschläge auch bereits einen Fullscan machen.
select Abteilung,
Gegenstand, sum(case when Zeit between :startdate and :enddate then 1 else 0 end) from tt group by Abteilung, Gegenstand Aber ich schätze, wenn es hier um Abteilungen geht, sind es eh keine Riesenmengen und Performance ist bedeutungslos. |
AW: count mit 0
Erstens macht meine Lösung keinen full scan und zweitens würde auch hier eine Abteilung erst dann in der Statistik auftauchen, wenn Daten vorhanden sind.
|
AW: count mit 0
Zitat:
Ich habe mich überhaupt nicht zu Deiner Lösung geäußert. Falls Du Dich zu meiner geäußert hast, würde ich sagen, das musst Du noch mal präziser formulieren, wir anfangen zu streiten, äh ich meinte bevor ich darauf eingehe. |
AW: count mit 0
Ich wollte halt mitreden. :oops:
|
AW: count mit 0
Hallo Zusammen,
erst mal vielen Dank für die Rückmeldungen. @napeths Die Möglichkeit scheint mir im Augenblick die sinnvollste, vor allem weil sie "selbstdokumentierend" ist. @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. @Jumpy ,Aurelius,Dejan Vu wenn ich das richtig verstanden habe, Wird hierbei ein "Abteilungs/Gegenstand"-Platzhalter ohne ein Zählergebnis (null) geliefert. Daraus kann man dann 0 basteln. Ich denke, es ist klar das die Originalabfrage etwas komplexer ist, darum muß ich da ein wenig Zeit, auch für die Performance, investieren um die optimale Lösung zu implementieren. Wenn ich soweit bin, melde ich mich nochmals. Euch allen vielen Dank! K-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:49 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