Besoin d'aide SQL

egallant Messages postés 31 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 17 septembre 2004 - 19 juil. 2004 à 12:07
egallant Messages postés 31 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 17 septembre 2004 - 20 juil. 2004 à 09:37
Bonjour,
J'ai besoin d'aide sur une requête SQL (vb6--- access)

J'ai une table (table1) qui contient plusieurs champs dont :

Champ1 Champ2 .....
1234_001 A
1234_002 A
1234_003 A
1235_001 B
1236_001 C
1237_001 A
1237_001 A
1237_001 A

Le champ 1 est un numéro de dossier 1234 et un numero de suite _001
Le champ 2 est un code Groupe

La requete que je veux faire est la suivante:
Compter le nombre de dossier par groupe mais sans tenir compte du numero de suite.

Résultat attendu:

A 2
B 1
C 1

Est ce que quelqu'un a une solution rapide ?
J'ai essayer avec un distinct(left(champ1,5)) mais je bloque sur le GroupBy et le Count (?)

Merci d'avance

16 réponses

cs_mguilhem Messages postés 69 Date d'inscription vendredi 27 février 2004 Statut Membre Dernière intervention 26 novembre 2005
19 juil. 2004 à 14:12
salut,

voilà qui devrait répondre à ta question:

select [champ2] as [groupe],count( left([champ1],5)) as [Nbrdossier] from [table1] group by [champ2]

Mais est-ce normal que 1237_001 A puisse apparaitre deux fois?
(si non, faut modifier la requête)

Bye !
0
egallant Messages postés 31 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 17 septembre 2004 1
19 juil. 2004 à 14:24
Merci de ta réponse mais c'est pas encore çà...

1) erreur dans ma premiere question :

Champ1 Champ2 .....
1234_001 A
1234_002 A
1234_003 A
1235_001 B
1236_001 C
1237_001 A
1237_002 A
1237_003 A

2) ta requete me donne :

groupe Nbrdossier
A 6
B 1
C 1

En fait tu as compter toutes les occurences de 1234_ (il y en a bien 3) et les 1237_ (il y en a bien 3 aussi) . A = 6.

Moi je veux que si plusiuers occurence de 1234_ existe, on ne la compte qu'une fois.

Je souhaite
groupe Nbrdossier
A 2
B 1
C 1

Merci
0
cs_mguilhem Messages postés 69 Date d'inscription vendredi 27 février 2004 Statut Membre Dernière intervention 26 novembre 2005
19 juil. 2004 à 14:59
Je me doutais de ça, j'ai bien fait de regarder la question à nouveau.

Voilà la requête modifiée:

select [groupe], count( [dossier]) as [NbrDossier] from (SELECT [champ2] AS [groupe], left([champ1],5) AS [dossier]
FROM table1 GROUP BY [champ2],left([champ1],5)) group by [groupe]

et on trouve:
groupe NbrDossier
a 2
b 1
c 1

Kenavo !
0
egallant Messages postés 31 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 17 septembre 2004 1
19 juil. 2004 à 15:13
D'un point de vue de la requete je comprends bien la syntaxe et elle me semble ok.
Par Contre access me met le message :
"Syntax error in From clause"
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_mguilhem Messages postés 69 Date d'inscription vendredi 27 février 2004 Statut Membre Dernière intervention 26 novembre 2005
19 juil. 2004 à 15:46
Ton acces souhaite peut-être voir des crochets
autour du nom de la table. Tiens:

SELECT [groupe], count( [dossier]) AS [NbrDossier]
FROM
(SELECT [champ2] AS [groupe], left([champ1],5) AS [dossier]
FROM [table1] GROUP BY [champ2],left([champ1],5))

GROUP BY [groupe]

Vérifie aussi les noms de champs et le nom de la table est-ce bien table1 ?

Je viens de l'essayer, ça marche.

Tiens moi au courant.
0
egallant Messages postés 31 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 17 septembre 2004 1
19 juil. 2004 à 16:04
toujours le meme probleme, même avec les crochets .
Ma version access est 97 ?

Si tu as d'autres idées? je suis assez perplexe.

En tous cas merci de ton aide.
0
cs_mguilhem Messages postés 69 Date d'inscription vendredi 27 février 2004 Statut Membre Dernière intervention 26 novembre 2005
19 juil. 2004 à 16:11
je te conseille de procéder en deux temps.

Tout d'abord essaie :
SELECT [champ2] AS [groupe], left([champ1],5) AS [dossier]
FROM [table1] GROUP BY [champ2],left([champ1],5)

puis si ça marche réessaie:

SELECT [groupe], count( [dossier]) AS [NbrDossier]
FROM
(SELECT [champ2] AS [groupe], left([champ1],5) AS [dossier]
FROM [table1] GROUP BY [champ2],left([champ1],5))

GROUP BY [groupe]

sinon signale le moi, on va essayer de comprendre pourquoi ça ne marche pas.

( le plus simple serait d'utiliser access 2000)
0
egallant Messages postés 31 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 17 septembre 2004 1
19 juil. 2004 à 16:15
alors, la premiere partie fonctionne bien.
Pour ce qui est de l'ensemble, toujours le même problème.

En access "Syntax error in FROM clause"

J'ai essayer en SQLServer 2000, la 1ere passe aussi mais l'ensemble bloque :Incorrect syntax near the keyword 'GROUP'.š

Pour le passage a access 2000, ce n'est pas d'actualité, contrainte groupe oblige.
0
cs_mguilhem Messages postés 69 Date d'inscription vendredi 27 février 2004 Statut Membre Dernière intervention 26 novembre 2005
19 juil. 2004 à 16:37
dis moi, tapes-tu tes requêtes en sql directement ?

teste toujours:

SELECT [groupe], count( [dossier]) AS [NbrDossier]
FROM
(SELECT [table1].[champ2] AS [groupe], left([table1].[champ1],5) AS [dossier]
FROM [table1] GROUP BY [table1].[champ2],left([table1].[champ1],5))

GROUP BY [groupe]
0
cs_mguilhem Messages postés 69 Date d'inscription vendredi 27 février 2004 Statut Membre Dernière intervention 26 novembre 2005
19 juil. 2004 à 16:37
dis moi, tapes-tu tes requêtes en sql directement ?

teste toujours:

SELECT [groupe], count( [dossier]) AS [NbrDossier]
FROM
(SELECT [table1].[champ2] AS [groupe], left([table1].[champ1],5) AS [dossier]
FROM [table1] GROUP BY [table1].[champ2],left([table1].[champ1],5))

GROUP BY [groupe]
0
cs_mguilhem Messages postés 69 Date d'inscription vendredi 27 février 2004 Statut Membre Dernière intervention 26 novembre 2005
19 juil. 2004 à 16:37
dis moi, tapes-tu tes requêtes en sql directement ?

teste toujours:

SELECT [groupe], count( [dossier]) AS [NbrDossier]
FROM
(SELECT [table1].[champ2] AS [groupe], left([table1].[champ1],5) AS [dossier]
FROM [table1] GROUP BY [table1].[champ2],left([table1].[champ1],5))

GROUP BY [groupe]
0
cs_mguilhem Messages postés 69 Date d'inscription vendredi 27 février 2004 Statut Membre Dernière intervention 26 novembre 2005
19 juil. 2004 à 16:40
J'ai bidouillé access, essaie ça aussi :

SELECT [groupe], count( [dossier]) AS NbrDossier
FROM [SELECT [champ2] AS [groupe], left([champ1],5) AS [dossier]
FROM [table1] GROUP BY [champ2],left([champ1],5)]. AS [table]
GROUP BY [groupe];
0
egallant Messages postés 31 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 17 septembre 2004 1
19 juil. 2004 à 16:41
toujours en sql, je n'aime pas l'assistant graphique.
l'erreur acces vient a mon avis du fait d'un SELECT directement après le FROM (???)
0
egallant Messages postés 31 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 17 septembre 2004 1
19 juil. 2004 à 16:44
Réunion!!!
Je te tiens au courant de l'évolution du probleme si je trouve une solution.

Dans tous les cas un grand merci pour ton aide.

A+
0
cs_mguilhem Messages postés 69 Date d'inscription vendredi 27 février 2004 Statut Membre Dernière intervention 26 novembre 2005
19 juil. 2004 à 17:10
Mercie de me tenir au courant, n'oublie pas d'essaiyer ça:

SELECT [groupe], count( [dossier]) AS NbrDossier
FROM [SELECT [champ2] AS [groupe], left([champ1],5) AS [dossier]
FROM [table1] GROUP BY [champ2],left([champ1],5)]. AS [table]
GROUP BY [groupe];

Kenavo !
0
egallant Messages postés 31 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 17 septembre 2004 1
20 juil. 2004 à 09:37
Bon, en essayant sur un ACCESS XP ca marche...
Le problème viens donc de la version 97.

Surper, va falloir que je trouve une autre facon de faire.

En tout cas merci beaucoup de ton aide.

Si je peux t'aider en retour, n'hésite pas.
0
Rejoignez-nous