2010-02-24 6 views
1

J'utilise Access via OleDb. J'ai une table avec les colonnes ID, GroupID, Time et Place. Une application insère de nouveaux enregistrements dans la table, malheureusement le lieu n'est pas calculé correctement.SQL Mettre à jour chaque enregistrement avec sa position dans une sélection ordonnée

Je souhaite mettre à jour chaque enregistrement dans un groupe avec son emplacement correct en fonction de l'heure ascendante.

donc partir les données suivantes:

ID  GroupId Time Place 
Chuck 1  10:01 2 
Alice 1  09:01 3 
Bob 1  09:31 1 

devrait se traduire par:

ID  GroupId Time Place 
Chuck 1  10:01 3 
Alice 1  09:01 1 
Bob 1  09:31 2 

je pourrais trouver une solution à l'aide d'un curseur, mais c'est pas possible dans AFAIK Access.

+3

Pardonnez le caractère brusque de cette question, mais pourquoi? Lieu semble être un artefact de tri par le temps. Toutes les informations dont vous avez besoin peuvent être dérivées d'un index ordinal dans une sélection triée. – Craig

+1

Legacy closed source ... Je sais que c'est une solution stupide. –

Répondre

2

Je viens de faire une recherche sur la réalisation de "classement dans Access" et j'ai obtenu this support.microsoft result.

Il semble que vous créez une requête avec un champ qui a l'expression suivante:

Place: (Select Count(*) from table1 Where [Time] < [table1alias].[Time]) + 1 

Je ne peux pas tester, donc j'espère que cela fonctionne. L'utilisation de ce vous pourriez être en mesure de le faire (où queryAbove est la requête ci-dessus):

UPDATE table1 
SET [Place] = queryAbove.[Place] 
FROM queryAbove 
WHERE table1.ID = queryAbove.ID 

Il est un long shot, mais s'il vous plaît donner un aller.

+0

Malheureusement, j'ai découvert que l'accès ne supporte pas les sous-sélections dans les instructions de mise à jour, vous pouvez utiliser la fonction DCount (ou similaire) pour le faire, mais c'est plutôt limité pour mes besoins. J'accepterai cette réponse car elle m'a orienté dans la bonne direction pour résoudre ce problème, bien que ce ne soit pas compatible avec l'accès. –

+0

Oh, c'est étrange. L'article que j'ai lié des références Microsoft Access 2000 Standard Edition, donc j'ai pensé que cela fonctionnerait. Mais merci pour la coche de toute façon :) Quand vous aurez une solution concrète pour cela, ce serait bien si vous pouviez le poster comme une réponse, car je voudrais sûrement le voir en action comme je suppose que d'autres le seront dans le futur. – Codesleuth

0

Je ne pense pas que l'heure est une colonne formatée en nombre ou en heure, le temps est malheureusement une chaîne de texte contenant les nombres et les dilimetrs du format d'heure. C'est pourquoi trier après la colonne horaire est illégal. Supprimer les dilimiteurs ":" et "," convertir en nombre entier, puis trier numériquement pourrait faire le travail

+0

hein? La colonne d'heure est en fait * pas * mon problème. Même si c'est le cas, votre "solution" est toujours incorrecte pour le problème qui n'est pas à portée de main. –