2013-08-23 4 views
2

Utilisation d'Access 2010.requête qui compte et augmenter le nombre d'instances en double de cet enregistrement

Donc, si j'avais une table

COL1 
A  
B  
A  
C  
A  

et la course de la requête que je recevrais la sortie en CAP2 où 'A' est dupliqué trois fois et sa valeur COL2 est incrémentée à son tour.

COL1 | COL2 
A | 1 
B | 1 
A | 2 
C | 1 
A | 3 
+2

Votre table contient-elle une colonne id? Les tables SQL sont intrinsèquement non ordonnées, vous avez donc besoin d'une autre colonne pour spécifier l'ordre. –

+0

Il peut facilement avoir un identifiant que j'avais retiré de l'exemple pour des raisons de simplicités - donc s'il a un id col des idées? – megaSteve4

Répondre

3

Ajoutez un champ à votre tableau. Choisissez NuméroAuto comme son type de données et en faire la clé primaire de la table. Je l'ai appelé le champ ID, donc ma version de vos données d'échantillon ressemble à ceci ...

ID COL1 
1 A 
2 B 
3 A 
4 C 
5 A 

La déclaration SELECT ci-dessous renvoie ce jeu de résultats ...

ID COL1 COL2a COL2b 
1 A  1  1 
2 B  1  1 
3 A  2  2 
4 C  1  1 
5 A  3  3 

COL2a et COL2b montre 2 méthodes pour atteindre le même résultat. DCount est spécifique à l'accès et les guillemets requis autour des valeurs de texte m.COL1. La seconde approche, COL2b, utilise une sous-requête corrélée qui pourrait fonctionner dans une base de données différente si vous le souhaitez. Et avec cette approche, vous n'aurez pas besoin de vous soucier de citer des valeurs de texte.

L'une ou l'autre approche nécessite essentiellement que le moteur DB lance une requête supplémentaire pour chaque ligne de l'ensemble de résultats. Donc, avec une énorme table, la performance sera une préoccupation. L'indexation aidera ici. Ajoutez un index sur COL1 s'il n'y en a pas déjà un. ID a déjà un index puisqu'il s'agit de la clé primaire.

Si vous ne pouvez pas ajouter de champ et que le tableau ne contient pas d'autre champ approprié, je pense que vous n'avez pas de chance. Vous ne serez pas en mesure d'obtenir ce que vous voulez avec une requête Access.

SELECT 
    m.ID, 
    m.COL1, 
    DCount(
     "*", 
     "MyTable", 
     "COL1 = '" & m.COL1 & "' AND ID <= " & m.ID 
    ) AS COL2a, 
    (
     SELECT Count(*) 
     FROM MyTable AS m2 
     WHERE m2.COL1 = m.COL1 AND m2.ID <= m.ID 
    ) AS COL2b 
FROM MyTable2 AS m 
ORDER BY m.ID; 
Questions connexes