![]() |
Datenbank: Interbase • Version: 6.5 • Zugriff über: Interbase Komponenten
SQL Berechnung und NULL
Hallo,
habe mal wieder ein Problem, ich versuche eine Summen Berechnung in SQL hinzubekommen. Das klappt auch, jedoch müssen alle addierten Felder einen Wert haben. Bei einem NULL Wert ist das gesamte Ergebnis NULL. Nun habe ich gegoogelt und auch hier geschaut. Folgendes habe ich gefunden: ![]() Gibt es so eine Funktion wie ISNULL auch für Interbase? |
Re: SQL Berechnung und NULL
Schließe die Null-Werte bei der Summierung doch aus
SQL-Code:
...Sum( case when <Feld> is not null then <Feld> else 0 end) ...
|
Re: SQL Berechnung und NULL
oder eben in der where clausel
SQL-Code:
where feld is not null
|
Re: SQL Berechnung und NULL
Hallo,
ist schon schlecht wenn die Finger langsamer als der Kopf, dann bleibt die Beschreibung auf der Strecke. Hier nun genauer: Ich schreibe gerade eine Mannschaftsverwaltung für unsere Dartmannschaft. Dort trage ich auch die Spielergebnisse ein. Hierfür habe ich zwei Tables "gespielte Einzel" und "gespielte Doppel". Pro Spieler gibt es einen Eintrag, in dem die Ergenisse addiert werden. In beiden Tables gibt es u.a. das Feld Punkte. Nun möchte möchte ich für die ewigen Bestenliste die erspielten Punkte addieren. Das mache ich nicht über die SUM Funktion sondern mittels
SQL-Code:
Ein Zusammenlegen der Tables macht aufgrund der restlichen DB-Struktur keinen Sinn.
einzel.punkte+doppel.punkte
So weit so schwer. Nun gibt es Spieler die haben noch nie Einzel bzw. Doppel gespielt haben. Somit ist noch ein NULL Wert vorhanden. Und das verwirft das Ergebnis. Zitat:
Meine vereinfachtes SQL Statement sieht folgendermaßen aus:
SQL-Code:
SELECT s.name||', '||s.vorname, e.punkte + d.punkte FROM "T_SPIELER" s
LEFT OUTER JOIN "V_EINZEL_ERGEBNIS" e ON e.spieler_id=s.id LEFT OUTER JOIN "V_DOPPEL_ERGEBNIS" d ON d.spieler_id=s.id and d.liga=e.liga WHERE (e.spieler_id is NOT NULL) AND (e.spieler_id is NOT NULL); Zitat:
Weiß noch jemand eine Lösung für mein Problem? Eine SP scheidet aus, da ich die Liste über alle Spieler und somit mehrere Records erhalten möchte |
Re: SQL Berechnung und NULL
Schon mal mit FB versucht, dort ist case when oder IIf bekannt
|
Re: SQL Berechnung und NULL
Zitat:
Eigentlich sollte das ja auch mit der IBConsole gehen und das habe ich nicht hinbekommen. Und auf reiner Befehlszeilenbasis ist mir das nicht komfortabel genug. Muss aber dazu sagen, das ich lediglich einen Abend Zeit investiert habe. Und die anderen gefunden Management-Tools alle kostenpflichtig waren. Vielleicht sollte ich mich nochmals mit dem Thema auseinander setzen. Bin für jeden weiteren Tip (auch für den Umstieg) dankbar. |
Re: SQL Berechnung und NULL
Zitat:
Zu deinem Problem... Probiers mal so:
SQL-Code:
select sum(coalesce(Punkte,0)) from ...
|
Re: SQL Berechnung und NULL
Hallo,
Zitat:
![]() ![]() Grüße vom marabu |
Re: SQL Berechnung und NULL
aber sag mal, weshalb willste denn die sätze mit berechen, für welche keine ergebnisse vorliegen :gruebel: :gruebel: :gruebel: :gruebel: ausserdem, erhöht sich ja dein punktewert ja dadurch nicht... wenn nicht gespielt wurde... also, was spricht gegen den ausschluss von NULL's ???
dein statement könnte dann in etwa wie folgt lauten:
SQL-Code:
ps: in deinen sql statement hattest du 'n fehler, du hast beide mal auf e.id is null geprüft und nicht einmal auf e.... und d...
SELECT s.name||', '||s.vorname, e.punkte + d.punkte FROM "T_SPIELER" s
LEFT OUTER JOIN "V_EINZEL_ERGEBNIS" e ON e.spieler_id=s.id LEFT OUTER JOIN "V_DOPPEL_ERGEBNIS" d ON d.spieler_id=s.id and d.liga=e.liga WHERE (d.punkte is NOT NULL) AND (e.punkte is NOT NULL); |
Re: SQL Berechnung und NULL
Hallo,
ich habe mir nun FB2.0 installiert die DB soweit auch konvertiert. Als Anwendung habe ich nun IBExpert. Das beschriebene Problem besteht aber immer noch. Keiner zahlreichen Tips hat funktioniert, immer bekomme ich die Fehlermeldung "procdure unknown" Ich weiß ob ich so vernagelt bin, aber alle Tips galten der SUM-Funktion. Diese kann ich aber nicht nutzen (denke ich) da ich zwei Felder aus verschiedenen Tables addieren möchte. Zitat:
Deshalb frage ich die tabelle "T_SPIELER" ab. Der Left Outer Join sorg dafür das alle Daten der anderen Tables mit zugeordnet werden. Leider gibt es aber auch Spieler, die weder Einzel noch Doppel gespielt haben. Diese filtere ich mit der WHERE Klausel wieder raus. Anders habe ich nie das Ergebnis so erhalten, wie es am ehesten meiner Vorstellung entspricht. Vielleicht mache ich es mir auch wieder umständlicher als es sein müsste, das wäre nichts neues... Zitat:
Somit liegen mir NULL Werte vor. Wie beschrieben soll ich eine absolute Statistik liefern, die die erspielten Punkte als einen Wert anzeigt. Somit muss ich die jeweiligen Felder der beiden Tables addieren. Ich hatte auch schon überlegt, mittels Trigger die Werte im Table anzupassen. Sodass immer beide Tables Werte für den Spieler liefern. Das finde ich aber nicht als die sauberste Variante. Zitat:
In arbeite nicht auch nicht mehr mit den Views sondern mit Tables. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:53 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