Entwickler-Ecke
Datenbanken - SQL (SUM)
Klaus D. - Di 28.12.04 21:34
Titel: SQL (SUM)
Gruß ...ich habe folgendes Problem mit meiner Abfrage. Das Ergebnis ist immer '' !keine Fehlermeldung!.
Quelltext
1: 2: 3: 4: 5: 6: 7:
| SELECT SUM((RE.ZEIT * LO.LOHN) + (RE.Preis * RE.Anzahl)) AS Kosten FROM tbl_Rechnung RE
INNER JOIN tbl_Lohn LO ON RE.SID_LOHN = LO.ID
WHERE RE.SID_Rechnung_NR =:ID |
ich muß dazusagen ,daß entweder die Felder (Zeit und Lohn) "ODER !" (Preis und Anzahl) einen Wert enthalten.
2 Query's zu nutzen um einmal die "SUM(RE.ZEIT * LO.LOHN) zu ermitteln und in der zweiten SUM(Preis * Anzahl) und dann die beiden Ergebnisse zu addieren funktioniert...kann aber doch nicht die Lösung sein.
Ich denke ich müßte in einen sql-String zwei Select-Abfragen unterbringen.
Um eine Rechnung handelt es sich in der ich einmal Arbeitsleistung und einmal Material habe, halt die Summe davon.
MfG...Klaus
retnyg - Di 28.12.04 21:38
das :ID sieht verdächtig aus ^^
Klaus D. - Di 28.12.04 21:48
Das :ID ist der Pr. Schlüssel der Haupttabelle.
Es handelt sich bei der abgefragten Tabelle doch um eine untergeordnete Tabelle und über das :ID stelle ich doch
den Bezug zur Pr. Tabelle her.
MfG...Klaus
retnyg - Di 28.12.04 21:48
aber ist das normal dass davor ein doppelpunkt kommt ?
UGrohne - Mi 29.12.04 01:23
Stehen dann in den jeweils anderen Feldern 0 oder gar nichts drin, also NULL? Denn wenn letzteres der Fall ist, wird wohl das das Problem sein. Setze mal alle Werte auf 0, die sonst NULL und teste es dann mal.
Wenn man mit so einem Wert rechnet, egal ob als Zahl oder als Text gibt es oft Probleme. Ich habe solche Erfahrungen mit DB2 gemacht, wo eine Konkatination von zwei Feldern, von denen eins NULL enthielt, wieder NULL war. Das war damals ein seeehr großes Problem ;-)
Klaus D. - Mi 29.12.04 01:31
Danke ich werd's morgen gleich mal testen,
- obwohl ich nicht begreifen möchte, : wenn ich den SQL-String also das was in den SUM-Klammern steht auseinander nehme und in 2 Query's packe und dann aus den Ergebnissen die Summe bilde ich keinerlei Probleme habe und es funktioniert.
wie gesgt...ich werd es testen und melde mich wieder.
MfG...Klaus :D
Klaus D. - Do 30.12.04 15:09
Gruß
ich habe mal schnell ne Datenbank(ADS)zusammengeschoben und getestet.
in den Felder wo garnichts drin steht ,füge ich in meiner Testdatenbank eine 0 ein, der Rest wie gehabt.
Ergebnis ist immer ''.
Teile ich die Abfrage auf 2 Query's auf, und add. die beiden Ergebnisse klappt alles.
Query1.
Quelltext
1: 2: 3: 4: 5:
| SELECT SUM(RE.ZEIT * LO.LOHN) AS Kosten FROM tbl_Rechnung RE INNER JOIN tbl_Lohn LO ON RE.SID_LOHN = LO.ID WHERE RE.SID_Rechnung_NR =:ID |
Query2.
Quelltext
1: 2: 3:
| SELECT SUM(RE.Preis * RE.Anzahl) AS Kosten FROM tbl_Rechnung RE WHERE RE.SID_Rechnung_NR =:ID |
Wo ich das Problem vermute,: in der ersten Abfrage definiere ich einen Join, da der Wert 'Lohn' sich in einer
anderen Tabelle befindet.
Helft mir bitte wie ich beide Abfragen in eine Query unter-bekomme.
HILFE :cry:
MfG...Klaus
jasocul - Do 30.12.04 19:05
Du kannst folgendes probieren:
Quelltext
1: 2: 3: 4: 5: 6: 7:
| SELECT SUM((nvl(RE.ZEIT,0) * nvl(LO.LOHN,0)) + (nvl(RE.Preis,0) * nvl(RE.Anzahl,0))) AS Kosten FROM tbl_Rechnung RE
INNER JOIN tbl_Lohn LO ON RE.SID_LOHN = LO.ID
WHERE RE.SID_Rechnung_NR =:ID |
Ich bin mir im Moment nicht sicher, ob die Funktion "nvl" zum Standard gehört. Bei Oracle funktioniert das.
Anmerkung:
Verknüpfungen mit NULL-Werten führen immer zu NULL-Werten, weil es ein undefinierter Wert ist. Alles andere wäre eine Besonderheit der Datenbank.
CenBells - Do 30.12.04 20:25
Titel: Re: SQL (SUM)
Klaus D. hat folgendes geschrieben: |
Quelltext 1: 2: 3: 4: 5: 6: 7:
| SELECT SUM((RE.ZEIT * LO.LOHN) + (RE.Preis * RE.Anzahl)) AS Kosten FROM tbl_Rechnung RE
INNER JOIN tbl_Lohn LO ON RE.SID_LOHN = LO.ID
WHERE RE.SID_Rechnung_NR =:ID | |
hi,
warum verwendest du denn da einen inner join? Kannst da nicht auch einen Outer join nehmen?
Also, wenn eines der Felder auch nur einmal NULL (also in einem Datensatz) enthält, gibt das ganze immer null... Wie meine Vorredner auch schon gesagt haben.
Warum teilst du das nicht so auf?
Quelltext
1: 2: 3: 4: 5:
| SELECT SUM(RE.ZEIT * LO.LOHN) AS Zeit, SUM(RE.Preis * RE.Anzahl) AS Kosten FROM tbl_Rechnung RE INNER JOIN tbl_Lohn LO ON RE.SID_LOHN = LO.ID WHERE RE.SID_Rechnung_NR =:ID |
Und schaust dir die werde dann anschließend mal an?
Gruß
Ken
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!