Queries

2.29 Query a campi incrociati per la trasposizione righe-colonne
  Roberto

Un modo poco complesso per effettuare la trasposizione tra righe e colonne di una tabella è quello di usare una query a campi incrociati che usi come tabella derivata una query unione che serializza i dati della tabella.

Ipotizziamo di avere una tabella chiamata Tabella1 che abbia la seguente struttura:
Data         Data/ora e chiave primaria
Gb             Numerico
Gr              Numerico
Ht              Numerico
B                Numerico
L                Numerico
M               Numerico
N                Numerico
T                Numerico

ed il seguente contenuto:

Data              Gb    Gr    Ht     B     L     M     N     T
-----------------------------------------------------------
1/9/2005         5      7      4     1     1     2      7     5
2/9/2005         4      4      5     5     5     4      5     5
3/9/2005         4      1      2     3     5     6      7     8
4/9/2005         5      8      7     6     4     3      2     1
Se si vuole stampare un report che invece riporta i dati impaginati come segue:

                  1/9/2005   2/9/2005   3/9/2005   4/9/2005
---------------------------------------------------------------
Gb                  5               4                4               5
Gr                   7               4                1               8
Ht                   4               5                2               7
B                     1               5                3               6
L                     1               5                5               4
M                     2               4                6              3
N                     7               5                7               2
T                      5              6                8               1
come origine record del report usare una query a campi incrociati che abbia il seguente codice SQL:
TRANSFORM Sum(Pippo.MioValore) AS [Il valore]
SELECT Pippo.Riga
FROM [SELECT Tabella1.Data, "Gb" AS Riga, Tabella1.Gb AS MioValore
FROM Tabella1
UNION SELECT Tabella1.Data, "Gr" AS Riga, Tabella1.Gr AS MioValore
FROM Tabella1
UNION SELECT Tabella1.Data, "Ht" AS Riga, Tabella1.Ht AS MioValore
FROM Tabella1
UNION SELECT Tabella1.Data, "B" AS Riga, Tabella1.B AS MioValore
FROM Tabella1
UNION SELECT Tabella1.Data, "L" AS Riga, Tabella1.L AS MioValore
FROM Tabella1
UNION SELECT Tabella1.Data, "M" AS Riga, Tabella1.M AS MioValore
FROM Tabella1
UNION SELECT Tabella1.Data, "N" AS Riga, Tabella1.N AS MioValore
FROM Tabella1
UNION SELECT Tabella1.Data, "T" AS Riga, Tabella1.T AS MioValore
FROM Tabella1;]. AS Pippo
GROUP BY Pippo.Riga
PIVOT Format([Data],"Short Date");

Download:
 
  TrasposizioneRigheColonne.zip (24Kb) MSAccess97 database


Se pensate di avere del materiale freeware interessante e volete pubblicarlo, allora leggete qui.