Re: Abfrage meherer MWSt.-Sätze

Tech-Archive recommends: Fix windows errors by optimizing your registry




Ralph Rutschmann <rutschm@xxxxxxx> schrieb ...
> Nun fragte ich bisher die Daten ab und berechnete die Umsatz- bzw.
> Mehrwertsteuer als auch die Bruttobeträge fliegend (neudeutsch "on the
> fly"):
>
>> Select rechnung.rg_serial As rg_serial, ;
>> Sum(rg_pos.e_preis * rg_pos.menge) As Netto, ;
>> Sum(((rg_pos.e_preis * rg_pos.menge) / 100) * ;
>> rg_pos.mwst_prozent) As MWSt, ;
>> Sum((rg_pos.e_preis * rg_pos.menge) + ((rg_pos.ges_preis / 100) * ;
>> rg_pos.mwst_prozent)) As Brutto From rg_pos ;
>> Where rg_pos.rg_nr = rechnung.rg_nr

Wenn Du die Daten direkt berechnen willst, wogegen zunächst nichts
einzuwenden ist (wenn der Prozessor nicht zu schwachbrüstig ist),
solltest Du Dir einen Gefallen tun und das Ganze in einer Sicht
vorbereiten:

CREATE VIEW Rechnungspositionen
AS
SELECT
rg_pos.rg_serial As rg_serial,
rg_pos.mwst_prozent,
-- weitere statische Spalten.
CAST(rg_pos.e_preis * rg_pos.menge AS decimal(14, 2)) AS Netto,

CAST(CAST((rg_pos.e_preis * rg_pos.menge AS decimal(14, 2))
* rg_pos.mwst_prozent * 0.01) AS decimal(14, 2)) AS MWSt

CAST(rg_pos.e_preis * rg_pos.menge AS decimal(14, 2))
+ CAST(CAST((rg_pos.e_preis * rg_pos.menge AS decimal(14, 2))
* rg_pos.mwst_prozent * 0.01) AS decimal(14, 2)) AS Brutto
FROM rg_pos
GO

Die diversen CAST sind nämlich schlussendlich notwendig,
damit Du ein richtiges Ergebnis ohne Rundungsfehler
bekommst (NUR wenns blosse Statistik ist kannst Du Dir
das ggf. sparen).
Voraussetzung dafür ist auch das die Ausgangsspalten entsprechend
genau sind (also decimal und nicht etwa float).

> Abgesehen davon, daß ich nicht verstehe, wieso ich eine Fehlermeldung
> (SQL: GROUP BY clause is missing or invalid) bekomme, wenn ich "From
> rechnung, rg_pos Where..." eingebe

wo jetzt immer Dein "rechnung.rg_serial" herkommt, das müsstest Du
schon ins GROUP BY Aufnehmen

>ist mir auch nicht klar, wie ich
> z.B. unterschiedliche Mehrwertsteuersätze je Rechnung getrennt und
> sortiert ausgeben kann, einschließlich der jeweiligen Summen im
> Detail, die Summen gruppiert nach MWSt.-Sätzen, als auch insgesamt

Anhand der Sicht kannst Du nun verschiedene Gruppierungen bilden.
Je nach Anzeige mag es dabei sinnvoller sein die Daten intern
zusammenzufassen, oder aber über UNION in einem einem Ergebnis.
(auch WITH ROLLUP mag eine Möglichkeit sein, lasse ich aber mal weg)

Die Lösung mit UNION könnte wie folgt aussehen:

-- Für Summen je Rechnung
SELECT 0 AS Detail,
rg_serial,
mwst_prozent, -- hier besser Schlüssel die MWSt Tabelle besser, s. u.
SUM(Netto) AS SummeNetto,
SUM(MWSt) AS SummeMWst,
SUM(Brutto) AS SummeBrutto
FROM Rechnungspositionen
GROUP BY rg_serial, mwst_prozent
UNION ALL SELECT
1 AS Detail, -- Für Gesamtsumme je MWSt Satz
NULL AS rg_serial,
mwst_prozent,
SUM(Netto) AS SummeNetto,
SUM(MWSt) AS SummeMWst,
SUM(Brutto) AS SummeBrutto
FROM Rechnungspositionen
GROUP BY mwst_prozent
-- Gesamtsumme
UNION ALL SELECT
2 AS Detail, -- für Gesamt Summe
NULL AS rg_serial
NULL AS mwst_prozent,
SUM(Netto) AS SummeNetto,
SUM(MWSt) AS SummeMWst,
SUM(Brutto) AS SummeBrutto
FROM Rechnungspositionen

> die Endsummen je Rechnung. Ganz fein wären dann noch die Gesamtsummen
> aller Rechnungen. :-)

das Erweitern um weitere Detail/Summen-Ebenen überlasse ich mal zum
Üben Dir.
Werden viele Rechnungen so verdichtet, lohnt es die Daten der untersten
Detail-Ebene zunächst in eine temporäre Tabelle zu verdichten und
die weiteren Summierungen daraus vorzunehmen.
>
> Also, wenn eine Rechnung z.B. 10 Positionen hat, 3 davon
> Mehrwertsteuersatz 0% (befreit), 3 davon Mehrwertsteuersatz 7% (halb)
> und der Rest davon Mehrwertsteuersatz 16% (normal), alle bunt
> gemischt, wie kriege ich die Daten der Rechung nach
> Mehrwertsteuersätzen sortiert und dann noch zu jedem

Wie oben im Kommentar angedeutet, wäre es beim Gruppieren sinnvoller
auf den MWSt Schlüssel und nicht auf den Prozentsatz zu verweisen.
Da es u. U. bei Auslandrechnungen möglich ist das ein anderes Land
gleiche Sätze hat, kriegt man da evtl. Probleme, wenn man die
einfach addiert.
Über den Schlüssel kannst Du zudem weiteren Text etc. zuordnen.
Und könnte oben bereits in der Sicht eingebunden werden.

> Vor allem, wenn ich
> vorher nicht weiß, ob überhaupt und wenn ja wie viele der möglichen
> Mehrwertsteuersätze auf einer speziellen Rechnung vorkommen?

Der Schlüssel sollte einen Steuersatz eindeutig identifizieren.

Gruss
Elmar


.



Relevant Pages

  • Re: Abfrage mit 2 Kriterien
    ... Ist Berlin + Rechnung ... Bitte auf die Unterschiede bei FROM achten. ... FROM tblSteuerdaten INNER JOIN LIEFTR_Einzel ON tblSteuerdaten.Inhalt = ...
    (microsoft.public.de.access)
  • =?iso-8859-1?Q?Re:_Abfrage_meherer_MWSt.-S=E4tze?=
    ... rg_pos.mwst_prozent)) As Brutto From rg_pos; ... bekomme, wenn ich "From rechnung, rg_pos Where..." ... Sum(e_Preis * Menge/100 * mwst_prozent) as MwSt, ...
    (microsoft.public.de.sqlserver)
  • Re: komplizierte Abfrage
    ... FROM RechnungsTab INNER JOIN RechPositionenTab ... FROM SetArtikelTAB INNER JOIN ArtikelTab ... für ein einzelne Rechnung der zweite. ...
    (microsoft.public.de.sqlserver)
  • Re: komplizierte Abfrage
    ... FROM RechnungsTab INNER JOIN RechPositionenTab ... FROM SetArtikelTAB INNER JOIN ArtikelTab ... für ein einzelne Rechnung der zweite. ...
    (microsoft.public.de.sqlserver)