selfhtml.de - Alles für den Webmaster!

 

Anzeige: united-domains - Die ganze Welt der Domains

united domains - jetzt Wunsch-Domain sichern!

Einfache & schnelle Domain-Registrierung zu fairen Preisen ohne Einrichtungsgebühren. Mehr als 250 Domain-Endungen aus einer Hand inklusive E-Mail- & Web-Weiterleitung. Einzigartiges Domain-Portfolio zur bequemen & sicheren Verwaltung Ihrer Domain-Namen.

Jetzt Domain-Check bei united-domains!

Nochmal Problem mit Dezimalstellen

Autor: manya
Datum: 07.11.2011 19:35:34

Guten Abend!

Ich habe eine Tabelle "Videos", die so aufgebaut ist:
http://s14.directupload.net/file/d/2701/3boby4wb_png.htm

Nun möchte ich aus dem Kaufpeis die Mehrtsteuer errechnen.

SELECT VideoID, Titel, Kaufpreis, Kaufpreis *19 /100 AS Mehrwertsteuer
FROM `videos`

Das klappt auch, jedoch hat dann das neue Feld "Mehrwertsteuer" 6 Nachkommastellen. Es sollen aber natürlich nur 2 sein, kaufmännisch gerundet.

Bei meinen Versuchen

SELECT VideoID, Titel, Kaufpreis, Kaufpreis *19 /100 AS Mehrwertsteuer DEC( 5.2 )
FROM `videos`

und

SELECT VideoID, Titel, Kaufpreis, Kaufpreis *19 /100 AS Mehrwertsteuer ROUND( 5.2 )
FROM `videos`

bekam ich aber beide Male Fehlermeldungen.
"#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ROUND (5.2) FROM `videos`"

Wie ist denn die richtige Syntax?


Gruß
manya



Re: Nochmal Problem mit Dezimalstellen

Autor: T.Jung
Datum: 08.11.2011 10:40:49

> Bei meinen Versuchen
>
> SELECT VideoID, Titel, Kaufpreis, Kaufpreis *19
> /100 AS Mehrwertsteuer DEC( 5.2 )
> FROM `videos`
>
> und
>
> SELECT VideoID, Titel, Kaufpreis, Kaufpreis *19
> /100 AS Mehrwertsteuer ROUND( 5.2 )
> FROM `videos`
>
> bekam ich aber beide Male Fehlermeldungen.
> "#1064 - You have an error in your SQL syntax;
> check the manual that corresponds to your MySQL
> server version for the right syntax to use near
> 'ROUND (5.2) FROM `videos`"
>
> Wie ist denn die richtige Syntax?

Erstens gibst Du bei ROUND nur die Anzahl der Nachkommastellen an -- also nicht "5.2", sondern nur "2" -- und zweitens musst Du den Query auch anders strukturieren:
SELECT VideoID, Titel, Kaufpreis,
ROUND ( (Kaufpreis *19/100), 2 ) AS Mehrwertsteuer
FROM `videos`

Die verschachtelten Klammern beim ROUND sind nicht unbedingt nötig, machen die Sache aber übersichtlicher.

HTH,
Tobias



Re: Nochmal Problem mit Dezimalstellen

Autor: manya
Datum: 08.11.2011 15:23:20

> Erstens gibst Du bei ROUND nur die Anzahl der
> Nachkommastellen an -- also nicht "5.2", sondern
> nur "2" -- und zweitens musst Du den Query auch
> anders strukturieren:
> SELECT VideoID, Titel, Kaufpreis,
> ROUND ( (Kaufpreis *19/100), 2 ) AS
> Mehrwertsteuer
> FROM `videos`


Vielen Dank, Tobias :-)
So klappt es.

Ich bin gerade dabei, in dem SQL-Tutorial von Teia ein wenig zu schmökern und die Beispiele nachzuvollziehen.
http://www.teialehrbuch.de/Kostenlose-Kurse/SQL/14747-Arithmetische-Ausdruecke.html

Das hätten die aber auch dazuschreiben können, wie man auf die dort gelistete Ausgabe mit den 2 Nachkommastellen kommt. ;-)

Gruß
manya



im Query erstellte neue Spalte benutzen

Autor: manya
Datum: 08.11.2011 17:53:21

Ich habe noch eine Anschlußfrage.

Auf der Seite
http://www.teialehrbuch.de/Kostenlose-Kurse/SQL/14747-Arithmetische-Ausdruecke.html
wird im 2. Beispiel der Verkaufspreis errechnet, der sich aus MWSt + Kaufpreis zusammensetzt.

Ich hätte das  jetzt spontan so geschrieben:

SELECT VideoID, Titel, Kaufpreis,
ROUND ((Kaufpreis *19 / 100),2)   AS Mehrwertsteuer,
(Kaufpreis + Mehrwertsteuer) AS Verkaufspreis
FROM `videos`

Der Query erzeugt aber eine Fehlermeldung
"#1054 - Unknown column 'Mehrwertsteuer' in 'field list'"
obwohl ich die Spalte "Mehrwertsteuer" eine Zeile obendrüber neu angelegt habe, und sie auch in der Ausgabe-Tabelle vorhanden ist.

Stattdessen muß man nur für diese simple Addition von (Kaufpreis + MWSt) für die neue Spalte "Verkaufspreis" die komplette MWSt-Berechnungsformel nochmal eingeben:

SELECT VideoID, Titel, Kaufpreis,
ROUND( (Kaufpreis *19 /100), 2 ) AS Mehrwertsteuer,
Kaufpreis + ROUND( (Kaufpreis *19 /100), 2 ) AS Verkaufspreis
FROM `videos`

In diesem Beispiel hält sich der Schreibaufwand ja noch in Grenzen, aber es gibt sicher auch mal aufwändigere Berechnungen, die dann ebenfalls wiederholt werden müssten. Ich kann mir vorstellen, daß das dann sehr unübersichtlich und pflegeaufwändig wird.

Gibt es nicht die Möglichkeit, die neu erstellte Spalte "Mehrwertsteuer" für weitere Berechnungen benutzen zu können? Vielleicht habe ich syntaktisch wieder etwas falsch gemacht, sodaß "Mehrwertsteuer" nicht erkannt wird?

Ich würde mich freuen, wenn sich ein SQL-Kundiger wieder in meinen Thread verirren würde. :-)

Gruß
manya



Re: im Query erstellte neue Spalte benutzen

Autor: T.Jung
Datum: 09.11.2011 09:47:17

> Der Query erzeugt aber eine Fehlermeldung
> "#1054 - Unknown column 'Mehrwertsteuer' in
> 'field list'" (...)
> In diesem Beispiel hält sich der Schreibaufwand
> ja noch in Grenzen, aber es gibt sicher auch mal
> aufwändigere Berechnungen, die dann ebenfalls
> wiederholt werden müssten. Ich kann mir
> vorstellen, daß das dann sehr unübersichtlich und
> pflegeaufwändig wird.
>
> Gibt es nicht die Möglichkeit, die neu erstellte
> Spalte "Mehrwertsteuer" für weitere Berechnungen
> benutzen zu können?

Soweit ich mich erinnern kann, habe ich so etwas wie Du jetzt noch nie versucht. Hab's aber gerade mal getestet, und es geht tatsächlich nicht.
Daraus kannst Du schon schließen, dass ich _keine_ Möglichkeit kenne, das zu verwirklichen.

Ich würde prinzipiell wahrscheinlich ohnehin eher dazu tendieren, Berechnungen dieser Art _nach_ dem Select in PHP durchzuführen. Ob das jetzt effizienter ist, weiß ich nicht -- noch nie getestet, es geht da ja eh um Sekundenbruchteile. Aber da kannst Du dann natürlich das einmal errechnete Ergebnis in einer Variablen speichern und für weitere Berechnungen wiederverwenden.

Gruß,
Tobias



Re: im Query erstellte neue Spalte benutzen

Autor: manya
Datum: 09.11.2011 12:52:13


> > Gibt es nicht die Möglichkeit, die neu
> erstellte
> > Spalte "Mehrwertsteuer" für weitere
> Berechnungen
> > benutzen zu können?

> Hab's aber gerade mal getestet, und es geht tatsächlich nicht.

Danke trotzdem für Deine Antwort. :-)
Zum Glück ist es heute ja nicht mehr so, daß Überbringer von schlechten Nachrichten gehängt werden. :-D


> Soweit ich mich erinnern kann, habe ich so etwas
> wie Du jetzt noch nie versucht. Hab's aber gerade
> mal getestet, und es geht tatsächlich nicht.
> Daraus kannst Du schon schließen, dass ich
> _keine_ Möglichkeit kenne, das zu verwirklichen.

Schade. :-(
Ich finde, daß SQL das eigentlich können sollte.
Die neue Spalte "Mehrwertsteuer" ist zwar physisch nicht vorhanden, aber virtuell muß sie ja irgendwo gespeichert sein.
Zumindest solange das SELECT läuft, sollte eigentlich auf die neu erzeugten Werte zugegriffen werden können.

> Ich würde prinzipiell wahrscheinlich ohnehin eher
> dazu tendieren, Berechnungen dieser Art _nach_
> dem Select in PHP durchzuführen.

> Ob das jetzt
> effizienter ist, weiß ich nicht -- noch nie
> getestet, es geht da ja eh um Sekundenbruchteile.
> Aber da kannst Du dann natürlich das einmal
> errechnete Ergebnis in einer Variablen speichern
> und für weitere Berechnungen wiederverwenden.

Ja, schon, aber es ist ja nicht nur ein einziger Wert, sondern für jeden Datensatz einer, den man dann in einem array speichern müßte, und hinterher in einem weiteren SELECT weiterverarbeiten kann. Wenn ich mir vorstelle, wieviele Fehler man auf diesem Weg einbauen kann... ;-)

Wie einfach wäre hingegen "meine" Wunschlösung, mit der virtuellen Spalte einfach weiterrechnen zu können.
Daß SQL das nicht kann, wundert mich schon sehr.

Gruß
manya



Re: im Query erstellte neue Spalte benutzen

Autor: T.Jung
Datum: 09.11.2011 13:27:08

> Ja, schon, aber es ist ja nicht nur ein einziger
> Wert, sondern für jeden Datensatz einer, den man
> dann in einem array speichern müßte, und
> hinterher in einem weiteren SELECT
> weiterverarbeiten kann. Wenn ich mir vorstelle,
> wieviele Fehler man auf diesem Weg einbauen
> kann... ;-)

Hmmmm, wieso?
1. Du selektierst VideoID, Titel, Kaufpreis.
Ergebnis des Selects wird dann ja sowieso in einem Array/Objekt zwischengespeichert und dann bei der Ausgabe auf der Site durchlaufen.

2. Bei der Ausgabe schreibst Du dann z.B. sowas hier:

    <?php
    foreach ($result as $r)
    {
        $mwst = round(($r['Kaufpreis'] / 19 * 100), 2);
        $verkaufspreis = $r['Kaufpreis'] + $mwst;
        ?>
        <div>
        Video: <?php echo $result['Titel']; ?><br>
        Preis: <?php echo $verkaufspreis; ?>
        </div>
        <?php
    }
    ?>


Somit hast Du das gleiche Ergebnis wie bei Deinem »Wunsch-Select«.
Die Berechnung kannst Du auch in eine function auslagern, auf die Du ggf. dann sowohl in der Liste von Produkten, als auch in der Einzeldarstellung eines Videos zurückgreifst.

Wenn Du uns also nicht wichtiges vorenthalten hast, verstehe ich nicht ganz, was Du mit dem zweiten Select meinst. ;-)

Gruß,
Tobias



Re: im Query erstellte neue Spalte benutzen

Autor: manya
Datum: 09.11.2011 17:56:04

> Wenn Du uns also nicht wichtiges vorenthalten
> hast, verstehe ich nicht ganz, was Du mit dem
> zweiten Select meinst. ;-)

Vorenthalten habe ich Euch nichts.
Da habe ich wohl bei dem 2. SELECT einen Denkfehler gemacht. :-/

Vielen Dank und Gruß
manya