2017-05-17 1 views
0

J'ai une table dans MS Access comme ceci:lignes des états SQL aux colonnes

Les colonnes sont:

-------------------------------------- 
| *Date* | *Article* | *Distance* | Value | 
--------------------------------------- 

Date, l'article et la distance sont les clés primaires, de sorte que la combinaison d'entre eux est toujours unique .

La distance de la colonne a des valeurs discrètes de 0 à 27.

je dois transformer cette table dans une table comme ceci:

---------- 
| *Date* | *Article* | Value from Distance 0| Value Dis. 1|...|Value Dis. 27| 
---------- 

Je ne sais vraiment pas une instruction SQL pour cette tâche . J'avais besoin d'une solution vraiment rapide, c'est pourquoi j'ai écrit une macro Excel qui fonctionnait bien mais qui était très inefficace et qui nécessitait plusieurs heures de travail. Maintenant que la quantité de données est 10 fois plus élevée, je ne peux plus utiliser cette macro.

Répondre

0

Vous pouvez la requête de pivot suivant:

SELECT 
    Date, 
    Article, 
    MAX(IIF(Distance = 0, Value, NULL)) AS val_0, 
    MAX(IIF(Distance = 1, Value, NULL)) AS val_1, 
    ... 
    MAX(IIF(Distance = 27, Value, NULL)) AS val_27 
FROM yourTable 
GROUP BY 
    Date, 
    Article 

Notez que l'accès ne supporte pas CASE expressions, mais il offre une fonction appelée IIF() qui prend la forme de:

IIF(condition, value if true, value if false) 

qui se comporte essentiellement de la même manière que CASE dans d'autres SGBDR.

+0

Merci ça marche !!! – DiKo