FROM – Utilizzo di PIVOT e UNPIVOT

  • 10/14/2019
  • 5 minuti per la lettura
    • V
    • c
    • M
    • i
    • M
    • +7

Si applica a: SQL Server (tutte le versioni supportate) Database SQL di Azure Istanza gestita di Azure SQL Azure Synapse Analytics Parallel Data Warehouse

Puoi utilizzare gli operatori relazionali PIVOT e UNPIVOT per modificare unespressione con valori di tabella in unaltra tabella. PIVOT ruota unespressione con valori di tabella trasformando i valori univoci di una colonna nellespressione in più colonne nelloutput. Inoltre, PIVOT esegue le aggregazioni in cui “sono necessarie per i valori di colonna rimanenti desiderati nelloutput finale. UNPIVOT esegue loperazione opposta a PIVOT ruotando le colonne di unespressione con valori di tabella in valori di colonna.

La sintassi per PIVOT fornisce è più semplice e più leggibile della sintassi che potrebbe essere altrimenti specificato in una serie complessa di istruzioni SELECT...CASE. Per una descrizione completa della sintassi di PIVOT, vedere FROM (Transact-SQL).

Sintassi

La sintassi seguente riassume come utilizzare loperatore PIVOT.

Osservazioni

Gli identificatori di colonna nella clausola UNPIVOT seguono le regole di confronto del catalogo. Per il database SQL, le regole di confronto sono sempre SQL_Latin1_General_CP1_CI_AS. Per SQL Server parzialmente contenuto database, le regole di confronto sono sempre Latin1_General_100_CI_AS_KS_WS_SC. Se la colonna è combinata ed con altre colonne, è necessaria una clausola collate (COLLATE DATABASE_DEFAULT) per evitare conflitti.

Esempio di PIVOT di base

Il seguente esempio di codice produce una tabella a due colonne con quattro righe.

Ecco il set di risultati.

Nessun prodotto è definito con tre DaysToManufacture.

Il codice seguente mostra lo stesso risultato, ruotato in modo che DaysToManufacture i valori diventano le intestazioni delle colonne. Viene fornita una colonna per tre giorni, anche se i risultati sono NULL.

Ecco il set di risultati .

Esempio PIVOT complesso

Uno scenario comune in cui PIVOT può essere utile è quando si desidera generare rapporti a tabelle incrociate per fornire un riepilogo dei dati. Ad esempio, supponi di voler eseguire una query nella tabella PurchaseOrderHeader nel database di esempio AdventureWorks2014 per determinare il numero di ordini di acquisto effettuati da determinati dipendenti. La query seguente fornisce questo rapporto, ordinato in base al fornitore.

Di seguito è riportato un set di risultati parziale.

I risultati restituiti da questa sottoselezione listruzione è imperniata sulla colonna EmployeeID.

I valori univoci restituiti da EmployeeID diventano campi nel set di risultati finale. In quanto tale, esiste “una colonna per ogni EmployeeID numero specificato nella clausola pivot: in questo caso i dipendenti 250, 251, 256, 257 e 260. Il PurchaseOrderID funge da colonna del valore, rispetto alla quale vengono raggruppate le colonne restituite nelloutput finale, chiamate colonne di raggruppamento. In questo caso, le colonne di raggruppamento vengono aggregate dal COUNT. Si noti che viene visualizzato un messaggio di avviso che indica che eventuali valori nulli visualizzati nella colonna PurchaseOrderID non sono stati “considerati durante il calcolo del id = “fccf2035df”> per ogni dipendente.

Importante

Quando si utilizzano funzioni aggregate con PIVOT , la presenza di valori nulli nella colonna del valore non viene considerata quando si calcola unaggregazione.

Esempio UNPIVOT

UNPIVOT esegue quasi loperazione inversa di PIVOT, ruotando le colonne in righe. Supponi che la tabella prodotta nellesempio precedente sia archiviata nel database come pvt e desideri ruotare gli identificatori di colonna Emp1, Emp2, Emp3, Emp4 e Emp5 in valori di riga che corrispondono a un particolare fornitore. Pertanto, è necessario identificare due colonne aggiuntive.La colonna che conterrà i valori della colonna che stai ruotando (Emp1, Emp2, …) sarà chiamata Employee e la colonna che conterrà i valori attualmente presenti sotto le colonne da ruotare sarà chiamata Orders. Queste colonne corrispondono a pivot_column e value_column , rispettivamente, nella definizione Transact-SQL. Ecco la query.

Ecco un set di risultati parziale.

Si noti che UNPIVOT non è “lesatto contrario di PIVOT. PIVOT esegue unaggregazione e unisce possibili più righe in una singola riga nelloutput. UNPIVOT non riproduce il risultato dellespressione originale con valori di tabella perché le righe sono state unite. Inoltre, i valori nulli nellinput di UNPIVOT scompaiono nelloutput. Quando i valori scompaiono, mostra che potrebbero esserci stati valori nulli originali nellinput prima delloperazione PIVOT.

Il Sales.vSalesPersonSalesByFiscalYears nel database di esempio AdventureWorks2012 utilizza PIVOT per restituire le vendite totali per ogni venditore, per ogni anno fiscale. Per scrivere la vista in SQL Server Management Studio , in Esplora oggetti, individuare la vista nella cartella Viste per il database AdventureWorks2012. Fare clic con il pulsante destro del mouse sul nome della vista, quindi selezionare Visualizza script come.

Vedere anche

FROM (Transact -SQL)
CASE (Transact-SQL)

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *