Gruppierung - Pivot

Silverness

Neuer Benutzer
Beiträge
1
Hallo liebe Experten des Datenbankforums,

ich bin noch relativ neu in der SQL-Welt obwohl ich mich mittlerweile seit über 1 Jahr damit mal mehr oder weniger beschäftige.
Hänge jetzt jedoch an einem Part, wo ich wirklich nicht mehr weiter komme.

Ich möchte eine Art Pivot-Tabelle aus SQL generieren. (1x Summe, 1x Anzahl)

Folgender Code ist aktuell meine Ausgangslage:

SELECT [buchungsdatum]
,[belegart]
,substring(belegnr, 1, 2) as belegnrkurz
,[sachkontonr]
,sum(betrag) as betrag
FROM [BH-DB].[dbo].[sachposten]
WHERE
(Sachposten.[Buchungsdatum]) BETWEEN '2023-01-01 00:00:00.000' AND '2023-01-31 00:00:00.000' AND
(sachposten.[sachkontonr]) IN ('2300','2303','2305') AND
(sachposten.[belegnr]) like 'RB%'
OR
(Sachposten.[Buchungsdatum]) BETWEEN '2023-01-01 00:00:00.000' AND '2023-01-31 00:00:00.000' AND
(sachposten.[sachkontonr]) IN ('2300','2303','2305') AND
(sachposten.[belegnr]) like 'SK%'
group by [buchungsdatum]
,[belegart]
,[belegnr]
,[sachkontonr]
,[betrag]


1689689089302.png


Wäre für jeden Input oder Lösungsansatz sehr dankbar.

FG
 
Werbung:
Das sieht nicht nach Pivot aus, das was Deine Wunschausgabe anzeigt. Das Statement macht ja auch kein Pivot.
Es sind Group By Abfragen.

Es sieht so aus, dass deine "akt. Ausgabe" nicht dem Statement entspringt, was Du geschrieben hast.

Das Statement sieht falsch aus, beim Group By fehlt der Ausdruck für "belegnrkurz".
Dann wiederholst Du den Ausdruck in SUM() beim Group By, das ist falsch. Gehört da nicht hin.
Schau Dir mal an, wie Aggregate gebildet werden und wie man richtig gruppiert. Wirst Du immer wieder brauchen, wenn Du SQL weiter machst.

Faustregel für Aggregatabfragen: Alle Spalten-Ausgaben in der Select Clause müssen entweder gruppiert oder aggregiert werden.
gruppiert = ins Group By
aggregiert = Aggregatfunktion wie SUM(), COUNT(), AVG()..

Dann noch eine Vermutung:
Deine Where Clause sieht so aus, als ob Du noch ein paar Klammern setzen möchtest. Zumindest in dem Fall, dass OR nicht nur für
(sachposten.[belegnr]) like 'RB%'
OR
(Sachposten.[Buchungsdatum]) BETWEEN '2023-01-01 00:00:00.000' AND '2023-01-31 00:00:00.000' AND

gelten soll, sondern für die Blöcke an Bedingungen, die Du optisch gebildet hast.
Da sich ein Großteil der Kriterien wiederholt gelten sie vielleicht immer und es brauch nur ein
AND (sachposten.[belegnr] like 'RB%' OR (sachposten.[belegnr]) like 'SK%')
ohne die Doppelung der restlichen Kriterien.
 
Zurück
Oben