In SQL , een draaitabel is een set gegevens die wordt omgevormd van een verzameling van afzonderlijke rijen tot een bundeling van columns . In relationele databases , zoals Microsoft SQL Server , Oracle en MySQL , kunnen draaitabellen worden gebruikt om uitgebreide gegevens te vereenvoudigen om het gemakkelijker maken om te lezen en te begrijpen . Om een draaitabel te maken , wordt een aggregaat gebruikt tegen een set van gegevens naar meerdere rijen van een kolom te verdelen in een rij met meerdere kolommen . Dit wezen draait het resultaat te stellen zijwaarts . Gegevens monster Om een draaitabel beter te begrijpen , is een voorbeeld van een aantal verkoopgegevens hier vermeld . Kopieer de volgende in Microsoft SQL Server Management Studio te proberen de voorbeelden . Maak tafel # PivotTestTable ( CustName varchar ( 8 ) , ITEM_TYPE varchar ( 8 ) , Item_Amount numeriek ( 6,2 ) ) op invoegen in # 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 Vanaf UnPivoted gegevens Wanneer de tijdelijke tabel , # PivotTestTable , wordt opgevraagd , is het resultaat het volgende . CustName ITEM_TYPE Item_Amount -------- -------------------- Alison Computer 345.89Alison Monitor 123.45Alison Software 78.78Jason computer 435.34Jason Monitor 158.23Jason Software 243,54 Zoals u kunt zien , het resultaat set toont twee klanten , Alison en Jason , die drie verschillende soorten objecten hebben gekocht . Er zijn zes rijen gegevens voor twee klanten . Als we wilden de gegevens in een enkele rij per klant zien , zouden we een draaitabel gebruiken om het gewenste resultaat te bereiken . Pivot door PIVOT functie Microsoft SQL Server heeft een PIVOT functie ingebouwd in SQL Server . Hier is een voorbeeld met de # PivotTestTable gegevens . SELECTCustName als Total_Sales_By_Cust , Computer , Monitor , SoftwareFROM ( SELECTCustName , ITEM_TYPE , Item_AmountFROM # PivotTestTable ) aPIVOT ( sum ( Item_Amount ) VOOR ITEM_TYPE in ( computer, monitor , software ) ) b Deze vraag zal de oorspronkelijke zes rijen terug gedraaid in twee rijen met aparte kolommen voor elk type item verkocht . Het resultaat set gegenereerd uit deze query is hier : Total_Sales_By_Cust Computer Monitor Software ------------------- ----------- --------------- Alison 345,89 123,45 435,34 158,23 243,54 78.78Jason Pivot door geaggregeerde Case Verklaring door het gebruik van een aggregaat functie ( sUM , AVG , mIN , MAX ) rond een case statement in een SQL-query , zijn we in staat om hetzelfde resultaat als de PIVOT functie met minder werk te bereiken . SELECTCustName als Total_Sales_By_Cust , sum ( case ITEM_TYPE wanneer ' Computer ' en vervolgens Item_Amount eind ) als Computer , sum ( case ITEM_TYPE wanneer ' Monitor' dan Item_Amount eind ) als Monitor , sum ( case ITEM_TYPE bij ' Software ' dan Item_Amount eind ) als SoftwareFROM # PivotTestTableGROUP DOOR CustName query exact hetzelfde resultaat set van het vorige voorbeeld terug te keren en is slechts een voorkeur voor welk type scharnier aan . veelgemaakte fout te gebruiken met pivot Tables een gemeenschappelijke vergissing om een draaitabel te maken is het creëren van een join terug op de bron tafel . Dit levert resultaten onbetrouwbaar en moeten worden vermeden . Dit voorbeeld is strikt een voorbeeld van wat niet te doen . Het resultaat in deze steekproef zal hetzelfde zijn, maar dit monster niet zal werken in alle gevallen SELECTp1.CustName , p1.Item_Amount als Computer , p2.Item_Amount als monitor , p3.Item_Amount als SoftwareFROM # PivotTestTable p1INNER . JOIN # PivotTestTable p2on p1.CustName = p2.CustNameand p2.Item_Type = ' Monitor'INNER WORD # PivotTestTable p3on p1.CustName = p3.CustNameand p3.Item_Type = ' Software'WHERE p1.Item_Type = ' Computer ' < br >
|