+39 339 8585151
info@easytarg.com
skip to the main content area of this page
I Ferri del Mestiere
 

Pivottare una tabella


Pivottare una tabella

Un problema abbastanza frequente riguarda la necessità di "ricostruire" un dataset con i dati provenienti da una tabella "Master" e da una tabella secondaria che contiene gli attributi del'entità della tabella Master.

Supponiamo di avere una Tabella contenente i dati di un'entità Master a cui è possibile associare un numero variabile di attributi definiti precedentemente. Gli attributi con i relativi valori vengono inseriti in una tabella secondaria.
Di seguito riporto una definizione minimale delle tabelle di partenza e il DataSet che si vuole ottenere.

Anagrafica Attributi
AttrPKAttrName
1Odore
2Colore
3Sapore

Tabella Master (MasterTable)
MasterPKMasterID
1Oggetto1
2Oggetto2
3Oggetto3

Tabella Secondaria (AttributesTable)
MasterPKAttrPKValue
11Acre
12Rosso
22Verde
23Salato
31Salmastro
32Giallo
33Dolce

Dataset Finale
MasterPKOdoreColoreSapore
1AcreRossoNull
2NullVerdeSalato
3SalmastroGialloDolce


Soluzione "Classica"

SELECT MT.MasterPK,
    A1.Value Odore,
    A2.Value Colore,
    A3.Value Sapore
  FROM MasterTable MT
    Left Join AttributesTable A1
      On MT.MasterPK = A1.MasterPK And A1.AttrPK = 1
    Left Join AttributesTable A2
      On MT.MasterPK = A2.MasterPK And A2.AttrPK = 2
    Left Join AttributesTable A3
      On MT.MasterPK = A3.MasterPK And A3.AttrPK = 3


Soluzione Cripto-Performante

SELECT MasterPK,
    Max(Case AttrPK When 1 Then Value Else NULL End) Odore,
    Max(Case AttrPK When 2 Then Value Else NULL End) Colore,
    Max(Case AttrPK When 3 Then Value Else NULL End) Sapore
  FROM AttributesTable
GROUP BY MasterPK




Tutte le Utility