2010-10-09 7 views
0

J'avais demandé cela avant, mais je pense que je l'ai mal formulé ou peut-être pas assez clairement. Je suis assez nouveau à Access et SQL, mais je suis assez adepte des ordinateurs. J'ai lu quelques livres/sites Web sur Access/SQL, mais je trouve ce problème un peu difficile. Ce serait beaucoup plus facile s'il s'agissait d'une simple plage SELECT, mais le scénario veut que je génère une table à partir d'une plage de dates (invites de la fenêtre), puis attacher 0-23 à chaque date. Il répète la même date pour chaque heure qui lui est associée.Générer une table en fonction d'une plage d'entrée utilisateur (dates), puis attacher 24H (colonne 2) à chaque date

Je suis assez perdu dans la génération des dates incrémentales, sans parler des heures.

Exemple sortie donnée d'entrée de l'échantillon 1/01/2009, 7/30/2009

utilisant MS Access 2007

Column 1 (Date) Column 2 (Hour) 

01/01/2009   0 

01/01/2009   1 

01/01/2009   2 

01/01/2009   3 

01/01/2009   4 

01/01/2009   ... continues to 23 

01/01/2009   22 

01/01/2009   23 

01/02/2009   0 

01/02/2009   1 

01/02/2009   2 

01/02/2009   3 

01/02/2009   4 

01/02/2009   .. continues to 23 

01/02/2009   0 

01/02/2009   1 

.................................. continues until the end date supplied by the user 

07/30/2009   22 

07/30/2009   23
+0

Y at-il d'autres données que vous devrez joindre à cela? Par exemple, des données de ventes horaires ou un autre type de rapport horaire? –

+0

Non. C'est la portée de la mission. –

+0

Vous utilisez Access, il semble, alors pourquoi ne pas utiliser VBA? Sinon, je pense que vous aurez besoin d'une table de compteur de quelque description. – Fionnuala

Répondre

0

Voici ce que je ferais.

Je créerais une table de date - la manière la plus simple serait de faire un autofill Excel de dates pour autant d'années que vous le souhaitez, puis de le copier dans votre table. La table doit avoir un identifiant et la date. Par exemple:

ID  Date 
========================== 
1   2010-01-01 
2   2010-01-02 
.... 

Je voudrais aussi créer une table d'heures - encore une fois avec un ID et une colonne d'heure (entier).

ID  Hour 
======================= 
1   0 
2   1 
........... 

Ensuite, créez une requête. Si vous utilisez la vue de conception, ajoutez vos deux nouvelles tables. Ajoutez la colonne de date et la colonne d'heures. Dans Critères pour le champ de date, mettez "Between [StartDate] And [EndDate]". Spécifiez que la colonne de date et la colonne d'heure doivent être triées par ordre croissant. Changez-le en une requête Make Table et exécutez-le. Vous serez invité à indiquer une date de début et une date de fin. Ça devrait le faire!

Voici le SQL généré si elle aide:

SELECT Dates.ShortDate, Hours.Hour INTO DatesHours 
FROM Dates, Hours 
WHERE (((Dates.ShortDate) Between [StartDate] And [EndDate])) 
ORDER BY Dates.ShortDate, Hours.Hour;