Gruppierungsprobleme

ACC_Entwickler

Aktiver Benutzer
Beiträge
28
Moin allerseits!
Ich habe Folgendes Problem:
Ich habe eine Tabelle mit Rechnungen, in denen Die Rechnungsbeträge ausgegeben werden. Es gibt für manche Rechnungen mehrere Einträge, da auf diese Waren sowie Leistungen gebucht werden sollen. Ich möchte nun diese Rechnungen alle anzeigen lassen, was kein Problem darstellt. Allerdings möchte ich die Rechnungen mit gleicher Rechnungsnummer zuätzlich in einer weiteren Spalte noch addieren. Und in einer weiteren Spalte noch das Produkt je nach Rechnungstyp anzeigen lassen. Als dritte Erweiterung brauche ich den Gesamtbetrag aller Rechnungen der gleichen WO. Ich habe das Gefühl dass ich hier mit Subselects arbeiten muss, komme aber partout nicht weiter.
Im Anhang ist ein Beispiel

Mein Code:

SELECT
x.[WO],
x.[Rechnung],
x.[Betrag],
x.[Rechnungstyp]

FROM(
SELECT
RIGHT(Format(CAST(A.counter AS int), '##-####'), 7) AS WO,
RIGHT(Format(CAST(I.RG AS int), '##-####'), 7) AS Rechnung,
II.eBetrag AS Betrag,
II.RGtyp AS Rechnungstyp

FROM SOdata.dbo.Aufträge AS A LEFT OUTER JOIN
SOdata.dbo.Invoice AS I ON A.Auftragsnummer = I.Auftragsnummer LEFT OUTER JOIN
SOdata.dbo.InvoiceIncome AS II ON A.Auftragsnummer = II.ID AND I.RG = II.RGnummer
WHERE (A.OrderType = 'Auftrag') AND (CHARINDEX('deleted', A.Auftragnr_neu) = 0 OR
CHARINDEX('deleted', A.Auftragnr_neu) IS NULL) AND (CHARINDEX('Auftrag', A.OrderType) = 1) AND (A.counter IS NOT NULL)
)x
WHERE WO = '22-7001'
Group BY x.[WO],
x.[Rechnung],
x.[Betrag],
x.[Rechnungstyp]

Im Anhang findet ihr die Ausgabe.
Wie oben beschrieben möchte ich eine Spalte in der der Gesamtbetrag also: 100.041,17 für alle Einträge dargestellt wird. Zusätzlich soll eine Spalte Betrag je Rechnung für die 22-7001 81.720 für die 22-7002 2.841,17 und für 22-7003 15.480 anzeigen. Die letzte Spalte soll Betrag nach Typ heißen und für alle Leistungen 98.100 und für alle Waren 1941,17 anzeigen. Ich hoffe das ist so zu verstehen.
Danke im Vorraus schonmal!
 

Anhänge

  • Lay Rechnungen.PNG
    Lay Rechnungen.PNG
    42,7 KB · Aufrufe: 8
Werbung:
@ACC_Entwickler: Du benötigst noch drei Abfragen von Deiner inneren SQL-Abfrage (am besten mit einer with-Formulierung oder einer View formulieren):
  • Die erste Abfrage die Attribute WO und SUM(Betrag) as Gesamtbetrag,
  • die zweite Abfrage die Attribute WO, Rechnung und SUM(Betrag) as Rechnungsbetrag und
  • die dritte Abfrage die Attribute WO, Rechnungstyp und SUM(Betrag) as Positionstypbetrag
Diese verknüpfst Du mit Standard Joins mit Deiner inneren Abfrage zusammen und kannst die entsprechenden Attribute anzeigen.
 
@ACC_Entwickler: Du benötigst noch drei Abfragen von Deiner inneren SQL-Abfrage (am besten mit einer with-Formulierung oder einer View formulieren):
  • Die erste Abfrage die Attribute WO und SUM(Betrag) as Gesamtbetrag,
  • die zweite Abfrage die Attribute WO, Rechnung und SUM(Betrag) as Rechnungsbetrag und
  • die dritte Abfrage die Attribute WO, Rechnungstyp und SUM(Betrag) as Positionstypbetrag
Diese verknüpfst Du mit Standard Joins mit Deiner inneren Abfrage zusammen und kannst die entsprechenden Attribute anzeigen.
Ich verstehe das defakto, habe aber keine Ahnung wie ich die weiteren Abfragen über Joins verknüpfen soll, hättest du da ein Code Beispiel für mich?
Danke schonmal für die Antwort!
 
create view betrag_view as
SELECT RIGHT(Format(CAST(A.counter AS int), '##-####'), 7) AS WO,
RIGHT(Format(CAST(I.RG AS int), '##-####'), 7) AS Rechnung,
II.eBetrag AS Betrag,
II.RGtyp AS Rechnungstyp
FROM SOdata.dbo.Aufträge AS A
LEFT OUTER JOIN SOdata.dbo.Invoice AS I
ON A.Auftragsnummer = I.Auftragsnummer
LEFT OUTER JOIN SOdata.dbo.InvoiceIncome AS II
ON A.Auftragsnummer = II.ID AND I.RG = II.RGnummer
WHERE (A.OrderType = 'Auftrag')
AND ( CHARINDEX('deleted', A.Auftragnr_neu) = 0
OR CHARINDEX('deleted', A.Auftragnr_neu) IS NULL)
AND (CHARINDEX('Auftrag', A.OrderType) = 1)
AND (A.counter IS NOT NULL)
;

select wo
, rechnung
, betrag
, rechnungstyp
, gesamtbetrag
, rechnungsbetrag
, positionstypbetrag
from betrag_view bv
join (
select wo, sum(betrag) as Gesamtbetrag
from betrag_view
group by wo
) q1
on bv.wo =q1.wo
join (
select wo, rechnung, sum(betrag) as Gesamtbetrag
from betrag_view
group by wo, rechnung
) q2
on bv.wo =q2.wo
and bv.rechnung= q2.rechnung
join (
select wo, Rechnungstyp, sum(betrag) as Gesamtbetrag
from betrag_view
group by wo, Rechnungstyp
) q3
on bv.wo =q3.wo
and bv.Rechnungstyp= q2.Rechnungstyp
 
Werbung:
Der Ansatz hat funktioniert, musste nurnoch die Syntax anpassen!
Vielen Vielen Dank!
Habe jetzt auch endlich verstanden wie die Joins mit den Subselects funktionieren!
Dickes Dankeschön, von meiner Seite!
 
Zurück
Oben