OD – Korzystanie z funkcji PIVOT i UNPIVOT

  • 14.10.2019
  • 5 minut na przeczytanie
    • V
    • c
    • M
    • i
    • M
    • +7

Dotyczy: SQL Server (wszystkie obsługiwane wersje) Azure SQL Database Wystąpienie zarządzane Azure SQL Azure Synapse Analytics Równoległa hurtownia danych

Możesz użyć operatorów relacyjnych PIVOT i UNPIVOT, aby zmienić wyrażenie wyceniane w tabeli na inną tabelę. PIVOT obraca wyrażenie wycenione w tabeli, zamieniając unikalne wartości z jednej kolumny wyrażenia na wiele kolumn w wyniku. I PIVOT uruchamia agregacje, w których są one „wymagane na wszelkich pozostałych wartościach kolumn, które są wymagane w końcowym wyniku. UNPIVOT wykonuje odwrotną operację do PIVOT poprzez obrócenie kolumn wyrażenia wycenionego w tabeli na wartości kolumn.

Składnia PIVOT zapewnia prostszą i bardziej czytelną składnię niż składnia, która mogłaby być inaczej określony w złożonej serii instrukcji SELECT...CASE. Pełny opis składni PIVOT można znaleźć w sekcji FROM (Transact-SQL).

Składnia

Poniższa składnia podsumowuje sposób korzystania z operatora PIVOT.

Uwagi

Identyfikatory kolumn w klauzuli UNPIVOT są zgodne z porządkiem katalogu. W przypadku SQL Database sortowanie jest zawsze SQL_Latin1_General_CP1_CI_AS. W przypadku programu SQL Server częściowo zawiera baz danych, sortowanie jest zawsze Latin1_General_100_CI_AS_KS_WS_SC. Jeśli kolumna jest kombinacją ed z innymi kolumnami, wymagana jest klauzula sortowania (COLLATE DATABASE_DEFAULT), aby uniknąć konfliktów.

Podstawowy przykład PIVOT

Poniższy przykład kodu tworzy tabelę z dwiema kolumnami i czterema wierszami.

Oto zestaw wyników.

Żadne produkty nie są zdefiniowane z trzema DaysToManufacture.

Poniższy kod wyświetla ten sam wynik po obróceniu tak, że DaysToManufacture wartości stają się nagłówkami kolumn. Podana jest kolumna dla trzech dni, mimo że wyniki są NULL.

Oto zestaw wyników .

Złożony przykład PIVOT

Typowy scenariusz, w którym PIVOT może być przydatny, to gdy chcesz wygenerować raporty zestawień krzyżowych, aby przedstawić podsumowanie danych. Na przykład załóżmy, że chcesz wykonać zapytanie w tabeli PurchaseOrderHeader w przykładowej bazie danych AdventureWorks2014, aby określić liczbę zamówień złożonych przez określonych pracowników. Poniższe zapytanie dostarcza ten raport uporządkowany według dostawcy.

Oto częściowy zestaw wyników.

Wyniki zwrócone przez tę podselekcję instrukcja jest przestawiana w kolumnie EmployeeID.

Unikalne wartości zwracane przez stanie się polami w końcowym zestawie wyników. W związku z tym istnieje „jedna kolumna dla każdego EmployeeID numeru określonego w klauzuli pivot: w tym przypadku pracownicy 250, 251, 256, 257 i 260. PurchaseOrderID służy jako kolumna wartości, względem której grupowane są kolumny zwracane w końcowym wyniku, zwane kolumnami grupującymi. W tym przypadku kolumny grupujące są agregowane przez COUNT. Zauważ, że pojawia się komunikat ostrzegawczy, który wskazuje, że wszelkie wartości null pojawiające się w kolumnie PurchaseOrderID nie zostały uwzględnione podczas obliczania COUNT dla każdego pracownika.

Ważne

Gdy funkcje agregujące są używane z PIVOT , obecność jakichkolwiek wartości null w kolumnie wartości nie jest brana pod uwagę podczas obliczania agregacji.

Przykład UNPIVOT

UNPIVOT wykonuje prawie odwrotną operację PIVOT, obracając kolumny w wiersze. Załóżmy, że tabela utworzona w poprzednim przykładzie jest przechowywana w bazie danych jako pvt i chcesz obrócić identyfikatory kolumn Emp1, Emp2, Emp3, Emp4 i Emp5 do wartości wierszy odpowiadających określonemu dostawcy. W związku z tym musisz zidentyfikować dwie dodatkowe kolumny.Kolumna, która będzie zawierać wartości kolumn, które „obracasz ponownie (Emp1, Emp2, …) będzie miała nazwę Employee, a kolumna, która będzie zawierała wartości, które aktualnie istnieją pod obracanymi kolumnami, będzie nosiła nazwę Orders. Te kolumny odpowiadają przestawnej_kolumnie i wartości_kolumnie odpowiednio w definicji języka Transact-SQL. Oto zapytanie.

Oto częściowy zestaw wyników.

Zwróć uwagę, że UNPIVOT nie jest „dokładnie odwrotnością PIVOT. PIVOT przeprowadza agregację i scala możliwe wiele wierszy w jeden wiersz w wyniku. UNPIVOT nie odtwarza oryginalnego wyniku wyrażenia wycenionego w tabeli, ponieważ wiersze zostały scalone. Znikają również puste wartości na wejściu UNPIVOT w danych wyjściowych. Kiedy wartości znikają, oznacza to, że przed operacją PIVOT mogły znajdować się oryginalne wartości null.

Sales.vSalesPersonSalesByFiscalYears w przykładowej bazie danych AdventureWorks2012 używa PIVOT do zwracania łącznej sprzedaży dla każdego sprzedawcy w każdym roku obrachunkowym. Aby utworzyć skrypt widoku w programie SQL Server Management Studio , w Eksploratorze obiektów zlokalizuj widok w folderze Widoki dla bazy danych AdventureWorks2012. Kliknij prawym przyciskiem myszy nazwę widoku, a następnie wybierz Widok skryptu jako.

Zobacz także

Z (Transact -SQL)
CASE (Transact-SQL)

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *