none
SQL-Abfrage mit mehreren Pivot-Bereichen RRS feed

  • Frage

  • Hallo und guten Tag

    Es soll per SQL eine Liste angezeigt werden, in der zwei Pivot-Bereiche erforderlich sind.

    Zum einen Bestellungen in einer Wochenansicht und daneben Wareneingänge in einer Wochenansicht.
    Gibt es da eine Möglichkeit in einem SQL zwei Pivot-Bereiche anzulegen?
    Oder über Subqueries?

    Vielen Dank für Eure Aufmerksamkeit.

    VG, Karl

    Dienstag, 24. April 2012 12:21

Antworten

  • Hallo Karl,

    natürlich geht das, wie ich bereits in einem anderen Beitrag den Pivot Operator beschrieben habe, nur musst du das ganze für jedes Feld durchführen und anschließend zusammen joinen, nicht gerade übersichtlich, funktioniert aber.

    hier der Link zu meinem anderen Beitrag in diesem Forum, da findest du auch eine lösung für dynamische PIVOTS: SQL Abfrage Summen/Gruppen

    Use TempDB
    
    Create Table #Test
    (Kdnr   varchar(4),
     Gruppe varchar(6),
     Umsatz decimal(4,2),
     Anzahl int)
    
     Insert into #Test (kdnr,Gruppe,Umsatz,Anzahl) Values ('K123', 'Grup01', 70.10,1)
     Insert into #Test (kdnr,Gruppe,Umsatz,Anzahl) Values ('K123', 'Grup02', 50.00,2)
     Insert into #Test (kdnr,Gruppe,Umsatz,Anzahl) Values ('K133', 'Grup01', 70.10,4)
     Insert into #Test (kdnr,Gruppe,Umsatz,Anzahl) Values ('K123', 'Grup01', 40.20,5)
     Insert into #Test (kdnr,Gruppe,Umsatz,Anzahl) Values ('K133', 'Grup02', 15.10,1)
     Insert into #Test (kdnr,Gruppe,Umsatz,Anzahl) Values ('K123', 'Grup02', 50.00,3)
     Insert into #Test (kdnr,Gruppe,Umsatz,Anzahl) Values ('K133', 'Grup01', 70.10,5)
     Insert into #Test (kdnr,Gruppe,Umsatz,Anzahl) Values ('K133', 'Grup02', 15.10,7)
     --Statisches Pivot
     --Hier werden die Pivot Spalten Statisch vergeben
    Select a.Kdnr,  a.[Grup01] UmsatzGrp1 ,a.[Grup02] UmsatzGrp2 ,b.[Grup01] AnzahlGrp1 ,b.Grup02 AnzahlGrp2 from
    	(
    		 Select Kdnr, [Grup01] , [Grup02]
    		 from (
    				Select Kdnr, Gruppe, Umsatz from #Test
    			  ) pv
    		 Pivot
    		 (
    		 Sum(Umsatz)
    		 FOR Gruppe in
    		 ([Grup01],[Grup02])
    		 ) as pvt
    	 ) as a
    
     Join 
    	(
    		 Select Kdnr, [Grup01] , [Grup02]
    			 from (
    					Select Kdnr, Gruppe, Anzahl from #Test
    				  ) pv
    			 Pivot
    			 (
    			 Sum(Anzahl)
    			 FOR Gruppe in
    			 ([Grup01],[Grup02])
    			 ) as pvt
    	) as b
    	On a.Kdnr=b.Kdnr 

    Ich hoffe es hilft dir etwas weiter.

    Gruß

    Theo

    Dienstag, 24. April 2012 17:50

Alle Antworten

  • Habe ich schon gemacht, Problem an der Sache ist, das man den SQL zusammenfügen muss, damit das hinhaut.

    Bsp: (wie ich dich verstehe)

    Teilenummer:       Woche 42 BE     Woche 42 WE     Woche 43 BE  Woche 43 WE

    4711                          240 000           178 000                25 000              70 000

    0815                          45 700               46 000                 22 000             21 300

    usw...

    Sowas geht, den SQL kann aber kein Mensch mehr lesen, selbst ich habe Schwierigkeiten diesen Select wieder zu entwirren :-)
    Ich kann dir den SELECT nicht posten, da Firmen Daten angezeigt werden würde, dieser SELECT hat aber über 100 Zeilen mit integrierten CURSOR, würde ich selbst so nicht mehr  machen.

    Dafür gibts die Anaylses Services :-)

    Einfach nen CUBE erzeugen mit allen DAten und den Usern für Excel bereitstellen.

    Bis dann


    thx

    Dienstag, 24. April 2012 15:00
  • Hallo Karl,

    natürlich geht das, wie ich bereits in einem anderen Beitrag den Pivot Operator beschrieben habe, nur musst du das ganze für jedes Feld durchführen und anschließend zusammen joinen, nicht gerade übersichtlich, funktioniert aber.

    hier der Link zu meinem anderen Beitrag in diesem Forum, da findest du auch eine lösung für dynamische PIVOTS: SQL Abfrage Summen/Gruppen

    Use TempDB
    
    Create Table #Test
    (Kdnr   varchar(4),
     Gruppe varchar(6),
     Umsatz decimal(4,2),
     Anzahl int)
    
     Insert into #Test (kdnr,Gruppe,Umsatz,Anzahl) Values ('K123', 'Grup01', 70.10,1)
     Insert into #Test (kdnr,Gruppe,Umsatz,Anzahl) Values ('K123', 'Grup02', 50.00,2)
     Insert into #Test (kdnr,Gruppe,Umsatz,Anzahl) Values ('K133', 'Grup01', 70.10,4)
     Insert into #Test (kdnr,Gruppe,Umsatz,Anzahl) Values ('K123', 'Grup01', 40.20,5)
     Insert into #Test (kdnr,Gruppe,Umsatz,Anzahl) Values ('K133', 'Grup02', 15.10,1)
     Insert into #Test (kdnr,Gruppe,Umsatz,Anzahl) Values ('K123', 'Grup02', 50.00,3)
     Insert into #Test (kdnr,Gruppe,Umsatz,Anzahl) Values ('K133', 'Grup01', 70.10,5)
     Insert into #Test (kdnr,Gruppe,Umsatz,Anzahl) Values ('K133', 'Grup02', 15.10,7)
     --Statisches Pivot
     --Hier werden die Pivot Spalten Statisch vergeben
    Select a.Kdnr,  a.[Grup01] UmsatzGrp1 ,a.[Grup02] UmsatzGrp2 ,b.[Grup01] AnzahlGrp1 ,b.Grup02 AnzahlGrp2 from
    	(
    		 Select Kdnr, [Grup01] , [Grup02]
    		 from (
    				Select Kdnr, Gruppe, Umsatz from #Test
    			  ) pv
    		 Pivot
    		 (
    		 Sum(Umsatz)
    		 FOR Gruppe in
    		 ([Grup01],[Grup02])
    		 ) as pvt
    	 ) as a
    
     Join 
    	(
    		 Select Kdnr, [Grup01] , [Grup02]
    			 from (
    					Select Kdnr, Gruppe, Anzahl from #Test
    				  ) pv
    			 Pivot
    			 (
    			 Sum(Anzahl)
    			 FOR Gruppe in
    			 ([Grup01],[Grup02])
    			 ) as pvt
    	) as b
    	On a.Kdnr=b.Kdnr 

    Ich hoffe es hilft dir etwas weiter.

    Gruß

    Theo

    Dienstag, 24. April 2012 17:50
  • Hallo kamaerja,

    Ich gehe davon aus, dass die Antwort Dir weitergeholfen hat.
    Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.

    Grüße,
    Robert


    Robert Breitenhofer, MICROSOFT  Twitter Facebook
    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Montag, 7. Mai 2012 14:26
    Moderator