![]() |
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. |
Re: SQL Berechnung und NULL
Welche Funktion?
Versuch mal
SQL-Code:
...sum(iif( <Feld> is not null, <feld>, 0))...
|
Re: SQL Berechnung und NULL
Zitat:
Ich meine die Funktion SUM. Ich bin der Meinung ich zwei Felder verschiedener Tables nicht über die SUM-Funktion addieren kann. Mit Deinem Vorschlag sieht meine SQL-Abfrage so aus:
SQL-Code:
Dadurch erhalte die Fehlermeldung "Token unknown: is"
SELECT s.name||', '||s.vorname, (iif(e.punkte IS NOT NULL, e.punkte, 0)) + (iif(d.punkte IS NOT NULL, d.punkte, 0)) as punkte
FROM "T_SPIELER" s LEFT OUTER JOIN "T_EINZEL_ERGEBNIS" e ON e.spieler_id=s.id LEFT OUTER JOIN "T_DOPPEL_ERGEBNIS" d ON d.spieler_id=s.id and d.liga=e.liga WHERE (e.spieler_id is NOT NULL) AND (d.spieler_id is NOT NULL); |
Re: SQL Berechnung und NULL
Wenn du Null-Werte im where ausschließt, brauchst du diese nicht mehr mit IIf o.ä. auschließen.
Sum summiert alle werte einer oder mehrerer Spalten. |
Re: SQL Berechnung und NULL
Zitat:
In den beiden Tables habe ich lediglich nur einen Eintrag pro Spieler. Die erspielten Punkten werden schon beim Eintragen durch eine SP addiert. Ich musste nur aus Abfragegründen die Einzelspiele von den Doppel trennen. Deshalb habe ich zwei Tables mit schon summierten Werten. Nun möchte ich lediglich die beiden summierten Werte addíeren. Ich werde die Sache jetzt versuchen mittels Trigger lösen, da ich für mein Problem keine andere Lösung mehr sehe. |
Re: SQL Berechnung und NULL
versuch mal
SQL-Code:
...not is null ...
|
Re: SQL Berechnung und NULL
Wäre es nicht möglich einen Trigger zu Programmieren der keine Null auf diesen Feld zuläst sonder 0.
Somit wäre das Problem beim addieren verschwunden. Peter |
Re: SQL Berechnung und NULL
Hallo,
habe die Sache mit einem Trigger gelöst. Sobald ich einen Spieler erzeuge bekommt dieser alle Werte auf 0 gesetzt. So klappt auch die Addition. Vielen Dank für Eure Hilfe. |
Re: SQL Berechnung und NULL
Hallo Marcus,
bei mir funktioniert das:
SQL-Code:
Grüße vom marabu
/*
spieler (id, nachname, vorname) einzel (spieler_id, punkte) doppel (spieler_id, punkte) */ SELECT id, nachname, vorname, (COALESCE(e.punkte, 0) + COALESCE(d.punkte, 0)) AS punkte FROM spieler s LEFT JOIN einzel e ON s.id = e.spieler_id LEFT JOIN doppel d ON s.id = d.spieler_id |
Re: SQL Berechnung und NULL
[quote="Werwurm"]Sobald ich einen Spieler erzeuge bekommt dieser alle Werte auf 0 gesetzt.[/default]
Dafür gibts auch Default Werte. Zitat:
![]() |
Re: SQL Berechnung und NULL
Da hilft eigentlich nur noch der Firebird Null-Guide. Dringend lesen. :mrgreen:
|
Re: SQL Berechnung und NULL
Zitat:
Zitat:
Aber wie gesagt, mittels Trigger läuft es wunderbar. Zitat:
Nochmals vielen Dank! :dp: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:41 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