![]() |
Datenbank: Oracle • Version: 11 • Zugriff über: FireDac
SQL Count(*) = 0?
Hi zusammen,
ich habe eine DB, auf deren Struktur ich keinen Einfluss habe - daher entsteht das folgende Problem überhaupt erst. :D Ich habe eine Tabelle "Objects", in der alle meine Objekte mit einer ID eindeutig identifiziert werden. Desweiteren gibt es eine Log-Tabelle mit dem Namen log$object_events, in der Statusänderungen aller(!) Objekte erfasst werden. Nun will ich zu allen meinen Objekten wissen, wie oft ein bestimmtes Event aufgetreten ist.
Code:
Das funktioniert soweit ganz gut, wenn es einen entsprechenden Event-Eintrag für die ObjectID gibt. Nur will ich den Count zu allen(!) Objekt-IDs ausgegeben haben, auch wenn das Event noch nicht aufgetreten ist. Dann soll der Count halt 0 sein.
select object$ID, count(Event) as DisableCount
from log$object_events where event = 'OBJECT_DISABLED' group by OBJECT$ID Google sagte mir, dass es da die Funktion "nvl" gibt. Nach meinem Verständnis müsste die Abfrage folgendermaßen abgeändert werden:
Code:
Aber auch hier bekomme ich nur die Objekte geliefert, bei denen das Event schon aufgetreten ist.
select object$ID, nvl(count(Event), 0) as DisableCount
from log$object_events where event = 'OBJECT_DISABLED' group by object$ID Ich gehe davon aus, dass lediglich mein Brett vor dem Kopf momentan verhindert, dass ich selber drauf komme. Daher bitte ich um Beistand um mich auf den Pfad der Tugend zurückzuführen. :D |
AW: SQL Count(*) = 0?
Ein Count(*) müsste nach meiner Kenntnis genügen.
|
AW: SQL Count(*) = 0?
Count(*) bringt das gleiche Ergebnis wie Count(beliebiger_Spaltenname). ;)
|
AW: SQL Count(*) = 0?
mal so aus den Fingern gesaugt...kann sein, dass bei nicht vorhandenem Event das Ergebnis für den count = Null ist.
SQL-Code:
select obj.ID, count(Event) as DisableCount
from Objects obj left join log$object_events loe on (loe.object$ID = obj.ID) where loe.event = 'OBJECT_DISABLED' group by obj.ID |
AW: SQL Count(*) = 0?
Auch das gibt mir nur die Datensätze zurück, in denen das betreffende Event existiert. :(
|
AW: SQL Count(*) = 0?
Wie kommst Du auf Die Idee etwas das nicht vorhanden ist zu zählen?
Natürlich kennst Du die Events die auftreten können, aber Deine Tabelle kennt nur die, die bereits aufgetreten sind. Du bräuchtest ungefär so etwas:
SQL-Code:
Gruß
select Eventname,Count(*)
from tableEvent join log$object_events on ( log$object_events.eventid=tableevent.eventid) Group by eventname ----- pardon vergessen! Union select Eventname,0 from tableEvent left join log$object_events on ( log$object_events.eventid=tableevent.eventid) where log$object_events.eventid is null K-H |
AW: SQL Count(*) = 0?
Der Hintergrund ist, dass ich mir alle Objekte ausgeben lassen will, die momentan verfügbar (enabled) sind.
Das kann ich aber nur herausfinden, indem ich prüfe, ob das Objekt einmal mehr aktiviert als deaktiviert wurde. Sprich: ich brauche die Anzahl der Enabled- und Disabled-Events um mir später dann nur die Objekte ausgeben zu lassen, bei denen EnableCount > DisableCount. Ich weiß: das ist völlig beschissen designed, weil es eine einfache StatusID auch getan hätte. Aber wie gesagt: die Struktur ist nicht auf meinen Mist gewachsen und ich habe da keinen Einfluss drauf. ;) Ich schaue mir deinen Vorschlag mal genauer an und gucke, inwieweit ich das auf mein Projekt übertragen kann. Danke erstmal soweit! Weitere Inputs natürlich jederzeit willkommen. |
AW: SQL Count(*) = 0?
Ein einfacher Subselect sollte das tun was du möchtest:
Code:
SELECT id,
(SELECT COUNT(*) FROM log$object_events WHERE (object$ID = object.id) AND (event = 'OBJECT_DISABLED')) AS eventcount FROM object; |
AW: SQL Count(*) = 0?
Zitat:
|
AW: SQL Count(*) = 0?
Zitat:
Grüße Klaus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:15 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