Autor Beitrag
Klaus D.
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 63



BeitragVerfasst: Di 28.12.04 21:34 
Gruß ...ich habe folgendes Problem mit meiner Abfrage. Das Ergebnis ist immer '' !keine Fehlermeldung!.
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: Di 28.12.04 21:38 
das :ID sieht verdächtig aus ^^
Klaus D. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 63



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: Di 28.12.04 21:48 
aber ist das normal dass davor ein doppelpunkt kommt ?
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: 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. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 63



BeitragVerfasst: 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. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 63



BeitragVerfasst: 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.
ausblenden 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.
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Do 30.12.04 19:05 
Du kannst folgendes probieren:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1547

Win 7
Delphi XE5 Pro
BeitragVerfasst: Do 30.12.04 20:25 
Klaus D. hat folgendes geschrieben:
ausblenden 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?
ausblenden 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

_________________
Eine Klasse beschreibt die Struktur und das Verhalten einer Menge gleichartiger Objekte.