2017-03-25 4 views
-1

J'ai une table de données comme suit:Génération de plusieurs colonnes à partir d'une colonne en fonction de leur ID, ... Accès VBA en utilisant ADO

ID | Date | TEMPS

1 | 01/12 | 01:00

1 | 01/12 | 02:00

1 | 02/12 | 03:00

2 | 01/12 | 01:00

comment générer plusieurs colonnes de la colonne (Time) à diviser comme le résultat ci-dessous en fonction des champs ID, Date:

ID | Date | Heure1 | Time2 | Time3 | Time4

1 | 01/12 | 01:00 | 02:00 | 03:00 | 04:00

1 | 02/12 | 01:00 | 02:00 | 03:00 | 04:00

2 | 01/12 | 01:00 | 02:00 | 03:00 | 04:00

préfèrent utiliser forme de procès, des boucles

+0

D'où vient le 04:00? – Gustav

+0

Poser votre question de cette façon ne vous aidera pas à obtenir une réponse, veuillez ne pas utiliser "Cette question est critique" pour les problèmes mal décrits, cela met les gens en colère de passer leur temps à résoudre un problème qu'ils ne peuvent résoudre que vous avez mis dans la composition de votre question. En revanche, il devrait être correctement formaté, explicitement défini et élevé de façon claire. – Lu4

Répondre

0

Vous voulez données 'pivot' ou 'dénormaliser'. Un CROSSTAB ne générera pas les en-têtes Time1, Time2, etc. car cela nécessiterait un autre champ avec un identifiant de séquence pour chaque groupe ID/Date. Vous pouvez faire un CROSSTAB qui utilise les heures comme en-têtes de colonne. Cela suppose qu'il existe au moins un enregistrement pour chaque fois afin de générer une colonne pour chaque fois. Suppose également que toutes les heures sont à l'heure comme indiqué dans votre exemple.

TRANSFORM First(Table1.Time) AS FirstOfTime 
SELECT Table1.ID, Table1.Date 
FROM Table1 
GROUP BY Table1.ID, Table1.Date 
PIVOT Table1.Time; 

Revue Pivot the data from Rows to Column

La date est un mot réservé dans Access, ne devrait pas utiliser des mots réservés comme noms pour quoi que ce soit.