Benutzer mit den meisten Antworten
SQL Abfrage Summen/Gruppen

Frage
-
Hallo!
Ich habe eine Tabelle, wo Kundennummer, Hauptgruppen und Umsätze erfasst sind und brauche pro Kunde eine Datenzeile, mit den summierten Gruppen - also nur 1 Satz.
Könnte mir jemand bei der SQL Abfrage behilflich sein?
Vielen Dank Ms
z.B.
Kdnr Gruppe Umsatz
K123 Grup01 70,10
K123 Grup02 50,00
K123 Grup01 30,00
K333 Grup01 40,20
K333 Grup02 15,10
usw.gewünschtes Ergebnis:
Kdnr Sum(Grup01) Sum(Grup02) ...
K123 100,10 50,00
K333 40,20 15,10
Antworten
-
Hi,
wie Daniel schon sagte, dies kannst du mit dem PIVOT Operator erledigen, ich habe dir dein Beispiel mal geschrieben.
Use TempDB Create Table #Test (Kdnr varchar(4), Gruppe varchar(6), Umsatz decimal(4,2)) Insert into #Test (kdnr,Gruppe,Umsatz) Values ('K123', 'Grup01', 70.10) Insert into #Test (kdnr,Gruppe,Umsatz) Values ('K123', 'Grup02', 50.00) Insert into #Test (kdnr,Gruppe,Umsatz) Values ('K123', 'Grup01', 30.00) Insert into #Test (kdnr,Gruppe,Umsatz) Values ('K133', 'Grup01', 70.10) Insert into #Test (kdnr,Gruppe,Umsatz) Values ('K123', 'Grup01', 40.20) Insert into #Test (kdnr,Gruppe,Umsatz) Values ('K133', 'Grup02', 15.10) --Statisches Pivot --Hier werden die Pivot Spalten statisch vergeben Select Kdnr, [Grup01] , [Grup02] from ( Select Kdnr, Gruppe, Umsatz from #Test ) pv Pivot ( Sum(Umsatz) FOR Gruppe in ([Grup01],[Grup02]) ) as pvt -- Dynamische erzeugung eines Pivots --Hier werden die Spalten für das Pivot dynamisch generiert DECLARE @Gruppe NVARCHAR(2000) SELECT @Gruppe = COALESCE(@Gruppe + ',[' + Gruppe + ']', '[' + Gruppe + ']') FROM (Select distinct Gruppe from #Test) Gruppe ORDER BY Gruppe DECLARE @SQL NVARCHAR(4000) SET @SQL = N' Select Kdnr, ' + @Gruppe + ' from ( Select Kdnr, Gruppe, Umsatz from #Test ) pv Pivot ( Sum(Umsatz) FOR Gruppe in('+@Gruppe+')) as pvt ' EXECUTE(@SQL) Drop Table #Test
Ich hoffe es hilft Dir weiter
Gruß
Theo
- Bearbeitet Breimeyer Donnerstag, 19. April 2012 17:42 SQL Sript erweitert
- Als Antwort markiert Michael-s-19 Freitag, 20. April 2012 06:42
Alle Antworten
-
ich gehe mal davon aus, dass die Gruppen bekannt sind und eine feste Anzahl umfasst.
In diesem Falle kannst Du der PIVOT Operator benutzen um Gruppe & Umsatz in eigene Spalten pro Gruppe zu mappen und danach den GROUP BY Operator anwenden:
siehe die Beschreibung fuer PIVOT Using PIVOT and UNPIVOT schau Dir die Beispiel an, sie sollten relativ leicht fuer Deinen Fall anpassbar sein (Im Beispiel COMPLEX Pivot sample muesste dann einfach COUNT durch SUM ersetzt werden)
Sonst poste einfach den Tabellen- und die Spaltennamen, dann wird sicher auch noch ein fertiges Codefragment gepostet werden.
-
Hi,
wie Daniel schon sagte, dies kannst du mit dem PIVOT Operator erledigen, ich habe dir dein Beispiel mal geschrieben.
Use TempDB Create Table #Test (Kdnr varchar(4), Gruppe varchar(6), Umsatz decimal(4,2)) Insert into #Test (kdnr,Gruppe,Umsatz) Values ('K123', 'Grup01', 70.10) Insert into #Test (kdnr,Gruppe,Umsatz) Values ('K123', 'Grup02', 50.00) Insert into #Test (kdnr,Gruppe,Umsatz) Values ('K123', 'Grup01', 30.00) Insert into #Test (kdnr,Gruppe,Umsatz) Values ('K133', 'Grup01', 70.10) Insert into #Test (kdnr,Gruppe,Umsatz) Values ('K123', 'Grup01', 40.20) Insert into #Test (kdnr,Gruppe,Umsatz) Values ('K133', 'Grup02', 15.10) --Statisches Pivot --Hier werden die Pivot Spalten statisch vergeben Select Kdnr, [Grup01] , [Grup02] from ( Select Kdnr, Gruppe, Umsatz from #Test ) pv Pivot ( Sum(Umsatz) FOR Gruppe in ([Grup01],[Grup02]) ) as pvt -- Dynamische erzeugung eines Pivots --Hier werden die Spalten für das Pivot dynamisch generiert DECLARE @Gruppe NVARCHAR(2000) SELECT @Gruppe = COALESCE(@Gruppe + ',[' + Gruppe + ']', '[' + Gruppe + ']') FROM (Select distinct Gruppe from #Test) Gruppe ORDER BY Gruppe DECLARE @SQL NVARCHAR(4000) SET @SQL = N' Select Kdnr, ' + @Gruppe + ' from ( Select Kdnr, Gruppe, Umsatz from #Test ) pv Pivot ( Sum(Umsatz) FOR Gruppe in('+@Gruppe+')) as pvt ' EXECUTE(@SQL) Drop Table #Test
Ich hoffe es hilft Dir weiter
Gruß
Theo
- Bearbeitet Breimeyer Donnerstag, 19. April 2012 17:42 SQL Sript erweitert
- Als Antwort markiert Michael-s-19 Freitag, 20. April 2012 06:42