Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Comptage sélectif d'enregistrements dans une requète.

11 réponses
Avatar
IlEstOuLeYouki
Bonjour,

Mes recherches sur le net sont infructueuses, aussi je me tourne vers vous.
Je vais prendre un exemple qui puisse parler aux informaticiens :
J'ai une table RESEAUX avec les champs (principaux) :
Nom_Reseau - Code_Reseau -
La clef est sur Nom Reseau.
J'ai une seconde Table SOUS-RESEAUX avec les champs (principaux) :
Nom_sous_reseau - Reseau - Utilisateur
La clef est sur Nom_sous_Reseau.
J'ai une relation de 1 à N de RESEAUX. à SOUS_RESEAUX par les champs
"Nom_Reseau " & "Reseau".

Et voilà enfin le problème :
Je fais une requète avec Nom_Reseau, Nombre_Utilisateurs
Mais il me faudrait sur CHAQUE ligne le nombre d'utilisateurs qui
correspondent au champs "Nom_Reseau" de la dite ligne, dans
Nombre_Utilisateur...

Dit autrement, il faudrait dans ma requète un champs qui n'existe sur aucune
table et qui correspond à un comptage d'enregistrement sélectif d'aprés le
1er champs de la ligne.

Exemple :

Table RESEAUX :
Reseau1 - b263
Reseau2 - g878
Reseau3 - p98

Table SOUS_RESEAUX :
Sreseau1 - Reseau2 - Martin
Sreseau3 - Reseau1 - Dupont
Sreseau4 - Reseau2 - Martin
Sreseau5 - Reseau2 - Martin

Ma requète devrait correspondre à :

Reseau1 - 1
Reseau2 - 3
Reseau3 - 0


J'espère avoir été clair et vous remercie d'avance pour votre aide
PS : je préfèrerais du SQL mais bon, je peux faire l'effort de mettre du
code.

Cordialement.

10 réponses

1 2
Avatar
Gloops
IlEstOuLeYouki a écrit, le 21/05/2011 12:18 :
Bonjour,

Mes recherches sur le net sont infructueuses, aussi je me tourne vers
vous. Je vais prendre un exemple qui puisse parler aux informaticiens :
J'ai une table RESEAUX avec les champs (principaux) :
Nom_Reseau - Code_Reseau -
La clef est sur Nom Reseau.
J'ai une seconde Table SOUS-RESEAUX avec les champs (principaux) :
Nom_sous_reseau - Reseau - Utilisateur
La clef est sur Nom_sous_Reseau.
J'ai une relation de 1 à N de RESEAUX. à SOUS_RESEAUX par les champ s
"Nom_Reseau " & "Reseau".

Et voilà enfin le problème :
Je fais une requète avec Nom_Reseau, Nombre_Utilisateurs
Mais il me faudrait sur CHAQUE ligne le nombre d'utilisateurs qui
correspondent au champs "Nom_Reseau" de la dite ligne, dans
Nombre_Utilisateur...

Dit autrement, il faudrait dans ma requète un champs qui n'existe sur
aucune table et qui correspond à un comptage d'enregistrement sélec tif
d'aprés le 1er champs de la ligne.

Exemple :

Table RESEAUX :
Reseau1 - b263
Reseau2 - g878
Reseau3 - p98

Table SOUS_RESEAUX :
Sreseau1 - Reseau2 - Martin
Sreseau3 - Reseau1 - Dupont
Sreseau4 - Reseau2 - Martin
Sreseau5 - Reseau2 - Martin

Ma requète devrait correspondre à :

Reseau1 - 1
Reseau2 - 3
Reseau3 - 0


J'espère avoir été clair et vous remercie d'avance pour votre aid e
PS : je préfèrerais du SQL mais bon, je peux faire l'effort de mett re du
code.

Cordialement.



Bonjour,

Oh la, avec juste sous la main le clavier et l'écran, on va voir ce que
ça donne.

Je verrais bien quelque chose comme

SELECT Reseau, Count(*)
FROM SOUS_RESEAUX
GROUP BY Reseau
Avatar
IlEstOuLeYouki
Merci mais cela ne fonctionne pas.
Avatar
Jeff
Bonjour

SELECT DISTINCTROW RESEAUX.Nom_Reseau, Count([SOUS-RESEAUX].Utilisateur)
AS CompteDeUtilisateur
FROM RESEAUX LEFT JOIN [SOUS-RESEAUX] ON RESEAUX.Nom_Reseau =
[SOUS-RESEAUX].Reseau
GROUP BY RESEAUX.Nom_Reseau
HAVING ((RESEAUX.Nom_Reseau Is Not Null));

Cordialement

Le 21/05/2011 12:18, IlEstOuLeYouki a écrit :
Bonjour,

Mes recherches sur le net sont infructueuses, aussi je me tourne vers
vous. Je vais prendre un exemple qui puisse parler aux informaticiens :
J'ai une table RESEAUX avec les champs (principaux) :
Nom_Reseau - Code_Reseau -
La clef est sur Nom Reseau.
J'ai une seconde Table SOUS-RESEAUX avec les champs (principaux) :
Nom_sous_reseau - Reseau - Utilisateur
La clef est sur Nom_sous_Reseau.
J'ai une relation de 1 à N de RESEAUX. à SOUS_RESEAUX par les champs
"Nom_Reseau " & "Reseau".

Et voilà enfin le problème :
Je fais une requète avec Nom_Reseau, Nombre_Utilisateurs
Mais il me faudrait sur CHAQUE ligne le nombre d'utilisateurs qui
correspondent au champs "Nom_Reseau" de la dite ligne, dans
Nombre_Utilisateur...

Dit autrement, il faudrait dans ma requète un champs qui n'existe sur
aucune table et qui correspond à un comptage d'enregistrement sélectif
d'aprés le 1er champs de la ligne.

Exemple :

Table RESEAUX :
Reseau1 - b263
Reseau2 - g878
Reseau3 - p98

Table SOUS_RESEAUX :
Sreseau1 - Reseau2 - Martin
Sreseau3 - Reseau1 - Dupont
Sreseau4 - Reseau2 - Martin
Sreseau5 - Reseau2 - Martin

Ma requète devrait correspondre à :

Reseau1 - 1
Reseau2 - 3
Reseau3 - 0


J'espère avoir été clair et vous remercie d'avance pour votre aide
PS : je préfèrerais du SQL mais bon, je peux faire l'effort de mettre du
code.

Cordialement.
Avatar
Gloops
IlEstOuLeYouki a écrit, le 23/05/2011 11:58 :
Merci mais cela ne fonctionne pas.





C'est que tu as dû désactiver l'affichage des informations par
Application.DisplayAlerts = False, sinon on en saurait plus.

Voilà un copier-coller d'un test que je viens de faire sous SQL Server.

SELECT tabTest.tstCol1, COUNT(*)
FROM [Test].[dbo].[tabTest]
GROUP BY tabTest.tstCol1

et j'ai bien deux colonnes, avec tstCol1 dans la première, et le nombre
d'enregistrements concernés dans la deuxième.

Cela étant Jeff pourra faire des tests plus appropriés ...
Avatar
Gloops
Bonjour,

Oui, très bien, mais saurais-tu dire pourquoi on ne réussit pas à b aser
le critère de groupage sur le code de réseau, plutôt que son intitu lé ?

En définitive, le but est d'afficher le nombre de sous-réseaux pour
chaque code de réseau, quel que soit l'intitulé qu'on trouve dans
l'autre table, non ?

Ensuite, ça peut effectivement être intéressant d'effectuer la join ture
si on veut aussi afficher l'intitulé.

___________________________________
Jeff a écrit, le 23/05/2011 15:38 :
Bonjour

SELECT DISTINCTROW RESEAUX.Nom_Reseau, Count([SOUS-RESEAUX].Utilisateur )
AS CompteDeUtilisateur
FROM RESEAUX LEFT JOIN [SOUS-RESEAUX] ON RESEAUX.Nom_Reseau =
[SOUS-RESEAUX].Reseau
GROUP BY RESEAUX.Nom_Reseau
HAVING ((RESEAUX.Nom_Reseau Is Not Null));

Cordialement
Avatar
db
Le 23/05/2011 16:39, Gloops a écrit :
Bonjour,

Oui, très bien, mais saurais-tu dire pourquoi on ne réussit pas à baser
le critère de groupage sur le code de réseau, plutôt que son intitulé ?

En définitive, le but est d'afficher le nombre de sous-réseaux pour
chaque code de réseau, quel que soit l'intitulé qu'on trouve dans
l'autre table, non ?

Ensuite, ça peut effectivement être intéressant d'effectuer la jointure
si on veut aussi afficher l'intitulé.




Bonsoir,

C'est surtout que la jointure externe devrait permettre de lister aussi
les réseaux sans sous-réseau, avec 0 comme nombre de sous-réseaux, ce
qui était, il me semble, la demande initiale.

db
Avatar
Gloops
db a écrit, le 23/05/2011 17:59 :
Le 23/05/2011 16:39, Gloops a écrit :
Bonjour,

Oui, très bien, mais saurais-tu dire pourquoi on ne réussit pas à baser
le critère de groupage sur le code de réseau, plutôt que son int itulé ?

En définitive, le but est d'afficher le nombre de sous-réseaux pou r
chaque code de réseau, quel que soit l'intitulé qu'on trouve dans
l'autre table, non ?

Ensuite, ça peut effectivement être intéressant d'effectuer la j ointure
si on veut aussi afficher l'intitulé.




Bonsoir,

C'est surtout que la jointure externe devrait permettre de lister aussi
les réseaux sans sous-réseau, avec 0 comme nombre de sous-réseaux , ce
qui était, il me semble, la demande initiale.

db




Ah, c'est vrai que ce point-là, je l'ai loupé.
D'où l'intérêt de poser des questions ...
Avatar
Jeff
Le 23/05/2011 16:35, Gloops a écrit :

Bonjour


Cela étant Jeff pourra faire des tests plus appropriés ...





Je ne comprends pas la remarque "tests plus appropriés" ...
Avatar
Jeff
Le 23/05/2011 16:39, Gloops a écrit :
Bonjour,



Bonjour

Oui, très bien, mais saurais-tu dire pourquoi on ne réussit pas à baser
le critère de groupage sur le code de réseau, plutôt que son intitulé ?



tu peux faire le groupage sur le code mais si tu ne mets pas
le nom du réseau dans la requête il faudra en faire une seconde
pour obtenir la correspondance entre le code réseau et son nom

En définitive, le but est d'afficher le nombre de sous-réseaux pour
chaque code de réseau, quel que soit l'intitulé qu'on trouve dans
l'autre table, non ?



Quand tu dis intitulé, tu parles de quel champ ?

Tu peux aussi faire :

SELECT DISTINCTROW RESEAUX.Nom_Reseau, Count([SOUS-RESEAUX].Reseau) AS
CompteDeReseau
FROM RESEAUX LEFT JOIN [SOUS-RESEAUX] ON RESEAUX.Nom_Reseau =
[SOUS-RESEAUX].Reseau
GROUP BY RESEAUX.Nom_Reseau
HAVING ((RESEAUX.Nom_Reseau Is Not Null));

Dans ce cas, le nom d'utilisateur ne rentre pas en ligne de compte.

Mais je ne sais pas si j'ai bien tout compris ...

Cordialement
Avatar
Gloops
Jeff a écrit, le 23/05/2011 19:10 :
Le 23/05/2011 16:35, Gloops a écrit :

Bonjour


Cela étant Jeff pourra faire des tests plus appropriés ...





Je ne comprends pas la remarque "tests plus appropriés" ...



J'ai fait mes tests sous SQL Server ... ;)
1 2