J'ai examiné un certain nombre de threads de transposition SQL ici et tous traitent des données de restructuration et/ou des résumés de données. J'ai une situation assez commune qui ne correspond à aucune de ces circonstances. S'il vous plaît gardez à l'esprit que c'est dans MS Access, et en utilisant une table liée (donc, aucune mise à jour n'est permise et il n'y a pas de clé ou d'identifiant).SQL pour MS Access table liée pour transposer des lignes et des colonnes
J'ai la table liée. Il n'y a que deux longues rangées de données. Par exemple, il s'agit d'une liste d'unités commerciales (BU) uniques et de ventes annuelles correspondantes.
linked_table
F1 F2 F3 F4 F5 ...
-----------------------------
row1 BU11 BU123 BU223 BU2 BU432...
row2 $2345 $0 $50.50 $234 $567.22
J'ai besoin cet ensemble de données transposées en quelque sorte dans ce:
new_table or new_query
BU Sales
---------------
BU11 $2345
BU123 $0
BU223 $50.50
BU2 $234
BU342 $567.22
...
Encore une fois, il n'y a que deux longues rangées de données dans une table d'accès lié. J'ai seulement trouvé une façon très fastidieuse et laide de faire à ce sujet, et je me demandais s'il y avait une meilleure façon de le faire.
ÉTAPE 1 J'ai séparé les deux lignes de données en 2 requêtes distinctes
headers_qry
F1 F2 F3 F4 F5...
------------------------------
row1 BU11 BU123 BU223 BU2 BU432...
data_qry
F1 F2 F3 F4 F5...
------------------------------
row1 $2345 $0 $50.50 $234 $567.22...
Je suis un Hardcoded « clé commune » factice dans les deux ensembles de données
headers_qry
F1 F2 F3 F4 F5... KEY
----------------------------------------------
row1 BU11 BU123 BU223 BU2 BU432... UNIQUE123
data_qry
F1 F2 F3 F4 F5... KEY
-----------------------------------------------
row1 $2345 $0 $50.50 $234 $567.22... UNIQUE123
Ensuite, J'ai ajouté une jointure entre les deux requêtes sur cette clé commune et couplé manuellement des paires d'en-tête et de données via des centaines d'instructions UNION. Aie!!!!
SELECT
headers.F1 AS BU_Number,
data.F1 AS BU_Sales
FROM header_data_join_qry UNION ALL
SELECT
headers.F2 AS BU_Number,
data.F2 AS BU_Sales
FROM header_data_join_qry UNION ALL
SELECT
...
headers.F100 AS BU_Number,
data.F100 AS BU_Sales
FROM header_data_join_qry UNION ALL;
Non seulement cela est fastidieux et laid, MS ACCESS ne peut pas gérer ces multiples UNION toutes les requêtes et une fois que je suis arrivé à environ 100, il a commencé à donner l'instruction SQL erreur trop complexe.
Existe-t-il un moyen de gérer cela mieux, compte tenu des limitations de la table source liée et de l'environnement MS ACCESS SQL? Merci beaucoup!
Vous avez obtenu jusqu'à 100? Je pensais que 50 était la limite de lignes SELECT dans UNION. Seule l'alternative que je connais est l'écriture d'enregistrements VBA dans la table temporaire - la table est permanente, les données sont temporaires. – June7
Jetez un oeil à la troisième réponse [ici] (https: // stackoverflow.com/questions/7255423/comment-simuler-unpivot-in-access-2010). Peut-être que cela vous aidera – cha
Je suis arrivé à 100 en séparant en 2 sous-requêtes essentiellement. Après cela, je ferais l'union des deux aussi. Cela augmente la tolérance d'ACCÈS au-dessus du total de 50 ... –