Seite 1 von 2
-
Verfasst: Mi, 02.01.2013 17:19
von Benutzer 48566 gelöscht
----------
Re: Abfrage-Fehler: Keine Ausgabe, wenn Ergebnis < 1
Verfasst: Mi, 02.01.2013 17:36
von juetho
Du gibst uns fast keine Informationen (SELECT-Befehl, Datentyp der Spalten, Art der Berechnung, was soll "leer" bedeuten - null oder 0?), also können wir nur raten. Zunächst ist bei meiner Arithmetik 1,8 durch 2 das Ergebnis 0,9, nicht 0,6. Außerdem gilt bei SQL die Integer-Division. Du siehst, dass mehr Angaben unbedingt erforderlich sind. Jürgen
-
Verfasst: Mi, 02.01.2013 17:50
von Benutzer 48566 gelöscht
----------
Re: Abfrage-Fehler: Keine Ausgabe, wenn Ergebnis < 1
Verfasst: Mi, 02.01.2013 18:13
von lorbass
miamit hat geschrieben:Interger Diskussion. Gut zu wissen.
Division, nicht
Diskussion
Gruß
lorbass
-
Verfasst: Mi, 02.01.2013 18:38
von Benutzer 48566 gelöscht
----------
Re: Abfrage-Fehler: Keine Ausgabe, wenn Ergebnis < 1
Verfasst: Mi, 02.01.2013 19:06
von juetho
Du musst dafür sorgen, dass mindestens eine der beteiligten Zahlen als Dezimalzahl verstanden und ausgewertet wird. Dafür gibt es die Funktionen CAST und CONVERT; am einfachsten ist es aber, den Divisor als
21.0 anzugeben.
Zum Runden gibt es verschiedene Funktionen - abhängig vom Datenbanksystem (auch das verschweigst du). Bei HSQL stehen sie im
Base-Handbuch auf Seite 271, bei
MySQL hier.
Jürgen
Re: Abfrage-Fehler: Keine Ausgabe, wenn Ergebnis < 1
Verfasst: Mi, 02.01.2013 19:33
von RobertG
Hallo Miamit,
miamit hat geschrieben:
Code: Alles auswählen
SELECT "Index", ( 6 * "A" + 5 * "B" + 4 * "C" + 3 * "D" + 2 * "E" + 1 * "F" ) / 21 AS "Ergebnis" FROM "Liste" WHERE "Filter" = 'Z'
Die Spalten A B C D E und F sind als Integer angelegt worden, da die Werte, die diese Spalten beinhalten, nur ganzzahlig sein können.
Kannst Du mir dann erklären, wie in Deinem ersten Posting aus einer Multiplikation und Addition von Ganzzahlen Zahlen mit Nachkommastellen, also Dezimalzahlen, entstehen? (10,5 | 1,8 | 12,4)
Denn wenn ich tatsächlich in einem Teil der Rechnung eine Dezimalzahl habe, dann klappt auch die Division.
Gruß
Robert
-
Verfasst: Do, 03.01.2013 08:42
von Benutzer 48566 gelöscht
----------
-
Verfasst: Do, 03.01.2013 08:43
von Benutzer 48566 gelöscht
----------
Re: Abfrage-Fehler: Keine Ausgabe, wenn Ergebnis < 1
Verfasst: Do, 03.01.2013 09:03
von RobertG
Hallo Miamit,
Du hast in dem ersten Posting geschrieben, dass Du z.B. 1,8 als Ergebnis einer Abfrage erhältst. Das müsste ja schon eine Zahl mit Nachkommastellen sein. Die kannst Du aber nicht erhalten, wenn Du Integer-Zahlen mit Ganzzahlen multiplizierst und diese dann addierst. Das bleiben dann Ganzzahlen.
Vor diesem Hintergrund müsstest Du wohl das erste Posting korrigieren. Denn dort behauptest Du, wenn 1,8 durch 2 geteilt würde, dann würde als Ergebnis '0' ausgeworfen. Das ist aber nicht Dein Problem gewesen, kann eigentlich auch nicht sein, da 1,8 ja eine Dezimalzahl ist und das Ergebnis dann auch eine Dezimalzahl sein wird - ergibt nämlich bei mir in jeder Abfrage 0,9.
Dein eigentliches Problem wird so etwas wie 3 geteilt durch 4 sein. Dann erst machen alle anderen Postings hier einen Sinn, die sagen: das hat etwas mit dem Format "Integer" bzw. "Dezimal" zu tun.
Gruß
Robert
-
Verfasst: Do, 03.01.2013 09:04
von Benutzer 48566 gelöscht
----------
-
Verfasst: Do, 03.01.2013 09:09
von Benutzer 48566 gelöscht
----------
Re: Abfrage-Fehler: Keine Ausgabe, wenn Ergebnis < 1
Verfasst: Do, 03.01.2013 11:40
von RobertG
Hallo Miamit,
wenn eine Änderung des Divisors auf '21.0' nichts änderte, dann möchte ich doch einmal wissen, mit welcher Office-Version und welcher Datenbank Du arbeitest. Ich erhalte bei der Eingabe von 6/21.0 unter LO 3.3.4 auf meinem Linux-System '0,3'; erweitere ich über den Divisor auf '21.00', so wird daraus '0,29'. Ich regele also die Nachkommastellen mit den Nachkommastellen des Divisors.
Zum Ändern mittels "Convert":
CONVERT("A",DECIMAL(4,2))
gibt Dir den Inhalt von "A" mit insgesamt 4 Stellen zurück, davon 2 Dezimalstellen.
Gruß
Robert
Re: Abfrage-Fehler: Keine Ausgabe, wenn Ergebnis < 1
Verfasst: Do, 03.01.2013 11:54
von juetho
miamit hat geschrieben:Das Ergebnis ist dann nicht immer eine Ganzzahl, sondern am Beispiel
(6*0+5*0+4*0+3*1+2*1+1*1 ) / 21.0 = 0.28irgendwas
Statt dieser Dezimalzahl bliebt die Zelle leider leer.
Auch das ändern des Divisors von 21 auf 21.0 änderte nichts daran.
Ich kann den Fehler nicht nachvollziehen. Bei mir funktionieren folgende Varianten (Summe als Zwischenwert, damit der auch zu sehen ist.
Code: Alles auswählen
SELECT "ID",
( 2 * "A" + 3 * "B" ) AS "Summe",
( 2 * "A" + 3 * "B" ) / 11 AS "IntDiv",
( 2 * "A" + 3 * "B" ) / 11.0 AS "Div1",
CAST( ( 2 * "A" + 3 * "B" ) AS DECIMAL ) / 11.0 AS "Div2"
FROM "Tabelle1" WHERE "A" IS NOT NULL
Die Variante mit CONVERT funktioniert bei mir überhaupt nicht und liefert eine äußerst merkwürdige Fehlermeldung.
syntax error, unexpected $end, expecting BETWEEN or IN or SQL_TOKEN_LIKE
Die Variante mit CAST funktioniert nur dann, wenn auch der Divisor als Decimal erkannt wird. Die Variante mit Integer-Division enthält bei HSQL offensichtlich eine Rundung (meistens wird abgerundet).
Wenn in einem Fall eine "leere" Angabe kommt, kann das nur daran liegen, dass in einem Datensatz ein
Feldinhalt NULL lautet (denn NULL, also "unbekannt", plus irgendetwas kann nur "unbekannt" liefern, also NULL).
Entweder du findest mit diesem Hinweis den Fehler; oder es bleibt dir nichts übrig als eine (anonymisierte und auf das Wesentliche reduzierte) Beispieldatei hochzuladen. Wegen der Differenzen zu Roberts Antwort gilt außerdem sein Hinweis:
RobertG hat geschrieben:dann möchte ich doch einmal wissen, mit welcher Office-Version und welcher Datenbank Du arbeitest.
Danach wird auch in
Allgemeine Hinweise zur Forumsbenutzung ausdrücklich gefragt. (Warum kann diese Information nicht sofort geliefert werden

) Jürgen
-
Verfasst: Do, 03.01.2013 12:50
von Benutzer 48566 gelöscht
----------