Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Division in Firebird SQL Abfrage (https://www.delphipraxis.net/124302-division-firebird-sql-abfrage.html)

OS299 18. Nov 2008 10:25

Datenbank: Firebird • Version: 2.0 • Zugriff über: SQL

Division in Firebird SQL Abfrage
 
Hallo ich möchte eine Division aus zwei inline Selects durchführen, bekomme aber eine Fehlermeldung, addieren und multiplizieren funktioniert einwandfrei. Vielleicht kann mir jemand helfen?

SQL-Code:
select VV.Kontakt, AK.Name,

       (select Count(VVI.Counter)
          From Vor_Vorgang VVI
          Where VVI.Vorgangsart = 30 and VVI.Kontakt = VV.Kontakt
           and VVI.DATUM >=:Z1 AND VVI.DATUM <=:Z2) as Angebot,

       (select Count(VVI.Counter)
         From Vor_Vorgang VVI
         Where VVI.Vorgangsart = 20 and VVI.Kontakt = VV.Kontakt
           and VVI.DATUM >=:Z1 AND VVI.DATUM <=:Z2) as Auftrag,

       (select Cast(Count(VVI.Counter)as Numeric(15,2))
          From Vor_Vorgang VVI
          Where VVI.Vorgangsart = 30 and VVI.Kontakt = VV.Kontakt
           and VVI.DATUM >=:Z1 AND VVI.DATUM <=:Z2)

           / <<<< Hier die Division

       (select Cast(Count(VVI.Counter)as Numeric(15,2))
         From Vor_Vorgang VVI
         Where VVI.Vorgangsart = 20 and VVI.Kontakt = VV.Kontakt
          and VVI.DATUM >=:Z1 AND VVI.DATUM <=:Z2)



From Vor_Vorgang VV
Left Join ADR_Kontakt AK on AK.Counter = VV.Kontakt
Where VV.DATUM >=:Z1 AND VV.DATUM <=:Z2
Group By VV.Kontakt, AK.Name
Order By AK.Name

mkinzler 18. Nov 2008 10:26

Re: Division in Firebird SQL Abfrage
 
Welcher Fehler wird gemeldet?

OS299 18. Nov 2008 10:28

Re: Division in Firebird SQL Abfrage
 
http://img3.imagebanana.com/img/6f8e...ov.1811.27.jpg

DeddyH 18. Nov 2008 10:30

Re: Division in Firebird SQL Abfrage
 
Kann das sein, dass da nur 2 Klammern fehlen?

mkinzler 18. Nov 2008 10:30

Re: Division in Firebird SQL Abfrage
 
Versuch mal
SQL-Code:
...
 Cast((select Cast(Count(VVI.Counter)as Numeric(15,2))
          From Vor_Vorgang VVI
          Where VVI.Vorgangsart = 30 and VVI.Kontakt = VV.Kontakt
           and VVI.DATUM >=:Z1 AND VVI.DATUM <=:Z2)

           / <<<< Hier die Division

       (select Cast(Count(VVI.Counter)as Numeric(15,2))
         From Vor_Vorgang VVI
         Where VVI.Vorgangsart = 20 and VVI.Kontakt = VV.Kontakt
          and VVI.DATUM >=:Z1 AND VVI.DATUM <=:Z2) as Numeric(15,2))
...

Gruber_Hans_12345 18. Nov 2008 10:31

Re: Division in Firebird SQL Abfrage
 
eventuell ein explizieter CAST in DOUBLE PRECISION der einzelnen Felder?

OS299 18. Nov 2008 10:37

Re: Division in Firebird SQL Abfrage
 
Zitat:

Zitat von mkinzler
Versuch mal
SQL-Code:
...
 Cast((select Cast(Count(VVI.Counter)as Numeric(15,2))
          From Vor_Vorgang VVI
          Where VVI.Vorgangsart = 30 and VVI.Kontakt = VV.Kontakt
           and VVI.DATUM >=:Z1 AND VVI.DATUM <=:Z2)

           / <<<< Hier die Division

       (select Cast(Count(VVI.Counter)as Numeric(15,2))
         From Vor_Vorgang VVI
         Where VVI.Vorgangsart = 20 and VVI.Kontakt = VV.Kontakt
          and VVI.DATUM >=:Z1 AND VVI.DATUM <=:Z2) as Numeric(15,2))
...

Ne gleiche Fehlermeldung ! Hatte diese Methode auch schonmal getestet.
Divisionen zweier Inlineselects sind aber im Grunde möglich oder?

mkinzler 18. Nov 2008 10:38

Re: Division in Firebird SQL Abfrage
 
Sollte möglich sein. Versuch es mal wie hans vorgeschlagen hat, jedes Teilergebnis zu Casten

OS299 18. Nov 2008 10:41

Re: Division in Firebird SQL Abfrage
 
SQL-Code:
       (select Cast(Count(VVI.Counter)as DOUBLE PRECISION)
          From Vor_Vorgang VVI
          Where VVI.Vorgangsart = 30 and VVI.Kontakt = VV.Kontakt
           and VVI.DATUM >=:Z1 AND VVI.DATUM <=:Z2)

           /

       (select Cast(Count(VVI.Counter)as DOUBLE PRECISION)
         From Vor_Vorgang VVI
         Where VVI.Vorgangsart = 20 and VVI.Kontakt = VV.Kontakt
          and VVI.DATUM >=:Z1 AND VVI.DATUM <=:Z2)
Habe es jetzt mal so versucht, auch Fehlermeldung. Aber eigentlich dürfte ja auch nur ganze Zahlen herauskommen, ich counte ja.

nahpets 18. Nov 2008 10:50

Re: Division in Firebird SQL Abfrage
 
Hallo,

wenn nur ganze Zahlen rauskommen, warum dann der Cast auf das Count (um hier eventuell bei der Division Nachkommastellen zu bekommen)?
Wie groß werden denn die Werte, die beim Count herauskommen?

Nersgatt 18. Nov 2008 10:50

Re: Division in Firebird SQL Abfrage
 
Zitat:

Zitat von OS299
Aber eigentlich dürfte ja auch nur ganze Zahlen herauskommen, ich counte ja.

Hm? Wie viel ist denn 2/3? Auf jeden Fall kein Integer, obwohl sowohl 2 und auch 3 ein Integer ist.

Gruß,
Jens

mkinzler 18. Nov 2008 10:52

Re: Division in Firebird SQL Abfrage
 
Ich meinte
SQL-Code:
...Cast(select Cast(Count(VVI.Counter)as DOUBLE PRECISION) ...) as DOUBLE PRECISION) / ...

OS299 18. Nov 2008 10:53

Re: Division in Firebird SQL Abfrage
 
Ja das ist klar aber die die gecounten Teilergebnisse oben sind ja immer gerade Zahlen, erst das Ergebnis der Division "kann" Gleitkommazahl.

mkinzler 18. Nov 2008 10:55

Re: Division in Firebird SQL Abfrage
 
Es reicht das es sein könnte

mikhal 18. Nov 2008 11:44

Re: Division in Firebird SQL Abfrage
 
Division durch 0?

Grüße
Mikhal

OS299 18. Nov 2008 12:06

Re: Division in Firebird SQL Abfrage
 
Das könnte natürlich sein, wenn ich z.b keine Aufträge hab aber durch die Angebote teile, dann knallts wie könnte ich verhindern das wenn dieser Fall eintritt keine Fehlermeldung ausgelöst wird.

Nersgatt 18. Nov 2008 12:12

Re: Division in Firebird SQL Abfrage
 
Frage mit IIF oder CASE WHEN ab, ob der Divisor 0 ist und reagiere entsprechend.
http://www.firebirdfaq.org/faq294/

Gruß,
Jens

OS299 18. Nov 2008 15:28

Re: Division in Firebird SQL Abfrage
 
Vielen dank leute hab jetzt den Tipp mit dem Iff verwendet und ersetze einfach wenn durch 0 geteilt werden soll durch 1 das genügt den Anforderungen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:43 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz