2010-08-10 4 views
1

Tenir compte le tableau suivant:difficulté à créer des totaux de mise à jour requête sur une même table

ID nonUniqueID value total 
-------------------------- 
1 12345  5  x 
2 12345  10 x 
3 789   20 x 
4 789   5  x 

je dois faire quelque chose de requête comme celui-ci (psuedo SQL), qui fonctionnera dans Access 2007:

UPDATE table 
SET total = SUM(value) 
WHERE nonUniqueID IS SAME; 

Le résultat devrait être comme suit:

ID nonUniqueID value total 
-------------------------- 
1 12345  5  15 
2 12345  10 15 
3 789   20 25 
4 789   5  25 

J'ai essayé bys groupe, mais j'obtenu des résultats bizarres que très franchement , Je ne pouvais pas interpréter. Est-ce que quelqu'un sait comment je pourrais réaliser quelque chose comme ça?

+0

En raison des limitations d'accès, je trouve la solution la plus simple était de faire une instruction select, puis une boucle à travers le jeu de résultats en VBA pour exécuter les mises à jour. – rageingnonsense

Répondre

3

Je ne sais pas si cela fonctionne dans Access ou non, mais lui donner un essai:

update table t1 
inner join (
    select nonUniqueID, sum(value) as SumValue 
    from table 
    group by nonUniqueID 
) t2 on t1.nonUniqueID = t2.nonUniqueID 
set t1.total = t2.SumValue 

Mise à jour: Basé sur this question, on dirait qu'il ne va pas fonctionner. Mais donnez-lui un coup de feu! Si ce n'est pas le cas, vous pouvez utiliser l'approche suggérée dans cette question.

+0

@rageingnonsense: voir ma mise à jour. – RedFilter

2

Une autre option possible:

update t 
set total = (select SUM(value) from table where nonUniqueID = t.nonUniqueID) 
from table t 
Questions connexes