? In SQL ist eine Pivot-Tabelle eine Reihe von Daten, die aus einer Sammlung von getrennten Reihen zu einer Sammlung von Spalten transformiert wird. In relationalen Datenbanken wie Microsoft SQL Server , Oracle und MySQL können Pivot-Tabellen verwendet, um umfangreiche Daten zu vereinfachen, um es einfacher zu lesen und zu verstehen. Um eine Pivot-Tabelle erstellen, wird ein Aggregat gegen einen Satz von Daten auf mehrere Zeilen aus einer einzelnen Spalte in einer einzigen Zeile mit mehreren Spalten verteilen verwendet . Dies ist im Wesentlichen das Ergebnis gesetzt schwenkt seitwärts. Sample Data
Um besser zu verstehen, eine Pivot-Tabelle ist ein Beispiel für einige Verkäufe hier aufgeführten Daten . Kopieren Sie den folgenden in Microsoft SQL Server Management Studio zu versuchen, die Beispiele.
Create table # PivotTestTable ( CustName varchar ( 8) , ITEM_TYPE varchar ( 8) , ITEM_AMOUNT numeric ( 6,2 ) )
< p > insert into # PivotTestTableselect ' Jason ' , 'Computer' , 435.34unionselect ' Jason ', ' Software ' , 243.54unionselect ' Jason ', ' Monitor' , 158.23unionselect ' Alison ' , 'Computer' , 345.89unionselect ' Alison ' , 'Software' , 78.78unionselect ' Alison ', ' Monitor' , 123,45
Ab unverschwenkten Daten
Wenn die temporäre Tabelle , # PivotTestTable wird abgefragt , das Ergebnis ist der folgende .
CustName ITEM_TYPE ITEM_AMOUNT -------- -------------------- Alison Computer- Überwachung 345.89Alison 123.45Alison Software 78.78Jason Computer- Überwachung 435.34Jason 158.23Jason Software 243.54
Wie Sie sehen können , zeigt das Ergebnis, Satz zwei Kunden , Alison und Jason , die drei verschiedenen Arten von Gegenständen erworben haben. Es gibt sechs Reihen von Daten für zwei Kunden. Wenn wir die Daten in einer einzigen Zeile pro Kunde sehen wollten , würden wir eine Pivot-Tabelle , um das gewünschte Ergebnis zu erzielen.
Pivot von Pivot-Funktion
Microsoft SQL Server verfügt über eine Pivot-Funktion in SQL Server integriert . Hier ist ein Beispiel mit den # PivotTestTable Daten .
SELECTCustName als Total_Sales_By_Cust , Computer, Monitor, SoftwareFROM ( SELECTCustName , ITEM_TYPE , Item_AmountFROM # PivotTestTable ) aPIVOT (sum ( ITEM_AMOUNT ) FÜR ITEM_TYPE in (Computer , Monitor, Software ) ) b
Diese Abfrage die ursprünglichen sechs Reihen zurückkehren wird geschwenkt in zwei Reihen mit getrennten Spalten für jede Art von Artikel verkauft. Das Ergebnis eingestellt generiert aus dieser Abfrage ist hier:
Total_Sales_By_Cust Computerbildschirm Software ------------------- ----------- --------------- Alison 345,89 123,45 435,34 158,23 243,54 78.78Jason
Pivot durch aggregierte Case-Anweisung
durch ein Aggregat Funktion ( SUM, AVG , MIN, MAX ) um eine case-Anweisung in einer SQL-Abfrage , sind wir in der Lage, das gleiche Ergebnis wie der Pivot-Funktion mit weniger Arbeit zu erreichen.
SELECTCustName als Total_Sales_By_Cust , sum ( Fall ITEM_TYPE wenn 'Computer' dann ITEM_AMOUNT Ende ) wie Computer, Summe ( Fall ITEM_TYPE wenn 'Monitor' dann ITEM_AMOUNT Ende ) als Monitor , sum ( Fall ITEM_TYPE wenn 'Software' dann ITEM_AMOUNT Ende ) als SoftwareFROM # BY CustName
PivotTestTableGROUP Diese Abfrage gibt die exakt gleiche Ergebnis der vorherigen Beispiel gesetzt und ist nur eine Vorliebe für welche Art von Zapfen .
gemeinsame Fehler mit Pivot-Tabellen zu verwenden
eine gemeinsame Fehler, eine Pivot-Tabelle zu erstellen, ist eine Verknüpfung erstellen zurück auf die Quelltabelle . Dies wird zu unzuverlässigen Ergebnissen führen und sollte vermieden werden . Dieses Beispiel ist streng ein Beispiel für das, was nicht zu tun. Das Ergebnis in diesem Beispiel wird die gleiche sein , aber diese Probe nicht in allen Fällen funktionieren
SELECTp1.CustName , p1.Item_Amount wie Computer, p2.Item_Amount wie Monitor, p3.Item_Amount als SoftwareFROM # PivotTestTable p1INNER . JOIN # PivotTestTable p2on p1.CustName = p2.CustNameand p2.Item_Type = ' Monitor'INNER join # PivotTestTable p3on p1.CustName = p3.CustNameand p3.Item_Type =' Software'WHERE p1.Item_Type = 'Computer'
< br >