2010-05-12 30 views
1

J'essaie de mettre à jour des enregistrements dans une table .mdb avec le nombre d'enregistrements contenant la même valeur.table de mise à jour ADO SQL avec le résultat du groupe par requête

Le SQL ne fonctionne pas au-dessous mais je pense que donne une indication de ce que je suis en train de réaliser.

UPDATE table1 AS A 
INNER JOIN (SELECT PH_BSP , Count(PH_BSP) AS PHCOUNT FROM table1 GROUP BY PH_BSP) AS B 
ON A.PH_BSP=B.PH_BSP 
SET A.PH_SORT = B.PHCOUNT; 

Des idées?

Répondre

0

Si vous faites cela dans Access, vous devez utiliser un domaine fonction d'agrégation:

UPDATE table1 
SET PH_SORT = DCount("PH_BSP","Table1","PH_BSP='" & PH_BSP & "'") 

qui précède suppose que PH_BSP est un champ de texte, laissez tomber les guillemets simples si elle est numérique.

+0

Merci pour l'info. Si les fonctions d'agrégat de domaine sont la seule façon de le faire pour une table d'accès, je pense que c'est revenir à «grouper» dans une table temporaire et rejoindre l'original. Je traite des centaines de milliers d'enregistrements par jour (dans de nombreuses bases de données) et DCount est juste trop lent (comme des heures à ralentir) Merci encore pour l'aide – brett

0

Avez-vous essayé quelque chose de semblable?

update table1 as a 
    set a.ph_sort = (
     select COUNT(b.ph_bsp) as phcount 
      from table1 b 
      where b.ph_bsp = a.ph_bsp) 

Je suppose SQL Server ici.

Mais cela ou quelque chose Alike devrait le faire, je suppose.

+0

table dans une base de données .mdb, donc l'accès est le rendez-vous ici ... J'ai essayé sql ci-dessus, mais obtenir un message: « L'opération doit utiliser une requête actualisable » – brett

+0

Ce message indique qu'il n'y a aucune mise à jour possible accomplir. Cela signifie qu'il y a eu une erreur, quelque part dans la DML. En fait, j'essayais de définir a.ph_bsp = (select ...) au lieu de a.ph_sort, dans mon exemple de code. Peut-être avec cet échantillon mis à jour? –

+0

@brett: essayer de ne pas 'AS A', peut-être c'est la raison pour laquelle la table ne devient pas actualisable –

1

Untested, mais exposant la déclaration thusly cela devrait résoudre votre problème

UPDATE A 
SET A.PH_SORT = B.PHCOUNT 
From table1 AS A 
INNER JOIN (SELECT PH_BSP , Count(PH_BSP) AS PHCOUNT FROM table1 GROUP BY PH_BSP) AS B 
ON A.PH_BSP=B.PH_BSP 

Edit: Votre problème est peut-être de votre sous requête, je voudrais essayer de mettre cette partie dans une requête d'accès séparé et voir comment ça va. De mémoire j'avais l'habitude d'avoir beaucoup de problème avec l'accès et les sous-requêtes, les crochets aideraient aussi parfois, mais peu fiables de la mémoire.

+0

+1 C'est aussi une forme bien connue que je n'a pas pensé. =) –

+0

accès Ceci génère: Erreur de syntaxe (opérateur manquant) dans expression de requête B.PHCOUNT De Table1 COMME INNER JOIN (SELECT PH_BSP, Count (PH_BSP) AS PHCOUNT DE GROUPE Table1 PAR PH_BSP) AS B SUR UN .PH_BSP = B.PH_BSP – brett