2008-12-02 8 views
3

J'ai une table MS Access 2007 héritée qui contient 52 champs (1 champ pour chaque semaine de l'année) représentant les données de ventes historiques (plus un champ pour l'année en fait). Je voudrais convertir cette base de données en une liste Time/Value plus conventionnelle.Comment convertir des champs en lignes via SQL dans MS Access 2007 ou MS SQL Server 2005

Est-ce que quelqu'un sait comment faire cela sans écrire des requêtes avec plus de 52 paramètres explicites?

(si une solution existe sous MS SQL Server 2005, je peux également exporter/importer la table)

Répondre

2

Using PIVOT and UNPIVOT.

UNPIVOT effectue l'opération presque inverse de PIVOT, en faisant tourner colonnes dans les rangées. Supposons que la table produite dans l'exemple précédent est stocké dans la base de données comme pvt, et vous à faire pivoter les identificateurs de colonne Emp1, Emp2, Emp3, Emp4 et Emp5 en valeurs de ligne qui correspondent à un fournisseur particulier. Cela signifie que vous devez identifier deux colonnes supplémentaires. La colonne qui contiendra les valeurs de la colonne que vous ROTATIVE (Emp1, Emp2, ...) seront appelés Employee, et la colonne qui maintenir les valeurs qui résident actuellement sous les colonnes étant pivotée s'appelle Commandes. Ces colonnes correspondent à la colonne pivot_couleur et valeur_column, respectivement, dans la définition Transact-SQL . Voici la requête .

--Create the table and insert values as portrayed in the previous example. 
CREATE TABLE pvt (VendorID int, Emp1 int, Emp2 int, 
Emp3 int, Emp4 int, Emp5 int) 
GO 
INSERT INTO pvt VALUES (1,4,3,5,4,4) 
INSERT INTO pvt VALUES (2,4,1,5,5,5) 
INSERT INTO pvt VALUES (3,4,3,5,4,4) 
INSERT INTO pvt VALUES (4,4,2,5,5,4) 
INSERT INTO pvt VALUES (5,5,1,5,5,5) 
GO 
--Unpivot the table. 
SELECT VendorID, Employee, Orders 
FROM 
    (SELECT VendorID, Emp1, Emp2, Emp3, Emp4, Emp5 
    FROM pvt) p 
UNPIVOT 
    (Orders FOR Employee IN 
     (Emp1, Emp2, Emp3, Emp4, Emp5) 
)AS unpvt 
GO 

est ici un ensemble de résultat partiel.

VendorID Employee Orders 
1  Emp1   4 
1  Emp2   3 
1  Emp3   5 
1  Emp4   4 
1  Emp5   4 
2  Emp1   4 
2  Emp2   1 
2  Emp3   5 
2  Emp4   5 
2  Emp5   5 
... 
+0

Merci pour cette réponse. Apprendre à utiliser PIVOT m'a permis d'économiser beaucoup de temps aujourd'hui !! –

2

Comme mentionné ci-dessus, l'opérateur UNPIVOT, le cas échéant, fera cela ... Si ce n'est pas disponible, approche std SQL est:

Union multiples sélectionnez statments (un pour chaque semaine) aLIAS la colonne de la semaine spécifique avec le même alias de nom de colonne

Select 1 as week, Week1Val as value from Table 
    UNION 
    Select 2 as week, Week2Val as value from Table 
    UNION 
    Select 3 as week, Week3Val as value from Table 
    UNION 
... 
    UNION 
    Select 52 as week, Week52Val as value from Table 
1

Pas besoin d'exporter vers SQL Server. Dans Access, essayez le sous-menu/View/PivotTable View. (C'est dans mon Access 2003, en tout cas.) Je l'aime mieux que celui d'Excel.

Questions connexes