Probleme de count

akhsas fatima zahra Messages postés 9 Date d'inscription samedi 17 mai 2014 Statut Membre Dernière intervention 7 août 2014 - Modifié par nancygmail le 4/06/2014 à 18:12
mpmp93 Messages postés 6652 Date d'inscription mercredi 13 avril 2011 Statut Membre Dernière intervention 28 septembre 2015 - 7 oct. 2014 à 08:26
bonjour,

je voudrais faire des statistiques des nouveaux clients sur ma base de données, je Je travaille en VB.NET, sous SQL SERVER.

et je cherche à avoir un tableau avec 2 colonnes:
mois et nbre_client

'mois'= le mois de la 1 ère l'inscription de client
'nbre_client' = le nombre des clients qui ont la 1ere inscription a cette mois

police=ma table

voila la requête:

select COUNT(distinct cin ) as nbre_client,MONTH(date_effet) as mois from Police group by date_effet having  month(min(date_effet))=1 and year(min(date_effet))=2013




le problème de cette requête c'est quand je change le mois elle me donne des résultats erronés.

Merci d'avance pour votre aide qui me permettra d'avancer

3 réponses

jordane45 Messages postés 38135 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 13 avril 2024 344
4 juin 2014 à 19:09
Bonjour,

Tu as essayé de faire ton group by sur le month(date) ?

select COUNT(distinct cin ) as nbre_client
          ,MONTH(date_effet) as mois 
from Police 
group by month(date_effet)
having  month(min(date_effet))=1 
and year(min(date_effet))=2013

0
akhsas fatima zahra Messages postés 9 Date d'inscription samedi 17 mai 2014 Statut Membre Dernière intervention 7 août 2014
4 juin 2014 à 19:25
oui justement,
parck je veux afficher les résultats selon chaque mois cdr nombre des nouveaux clients inscrits de chaque mois
0
akhsas fatima zahra Messages postés 9 Date d'inscription samedi 17 mai 2014 Statut Membre Dernière intervention 7 août 2014
4 juin 2014 à 19:36
j'ai essayé de créer une autre requête ,presque le nécessaire, elle affiche le nombre des personnes ,mais le problème c'est que je veux afficher aussi le mois d'inscription
voila la requête 2:
 select count(*) as NBRE
from (
select Date_effet
from police
where month(Date_effet)=1 and YEAR(date_effet)=2013
group by date_effet) T
0
jordane45 Messages postés 38135 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 13 avril 2024 344
5 juin 2014 à 01:12
tu as testé celle que je t'ai donné ?
0
akhsas fatima zahra Messages postés 9 Date d'inscription samedi 17 mai 2014 Statut Membre Dernière intervention 7 août 2014
5 juin 2014 à 13:00
oui ,elle ne fonctionne pas
0
jordane45 Messages postés 38135 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 13 avril 2024 344
Modifié par jordane45 le 5/06/2014 à 13:28
SELECT year(date_effet) as Année
      ,MONTH(date_effet) as mois 
      ,COUNT(distinct cin ) as nbre_client
FROM Police 
WHERE month(date_effet)>=1
AND year(date_effet)>=2013
group by month(date_effet)


Avant de poser une question, merci de lire la charte du site.
Cordialement, Jordane
0
akhsas fatima zahra Messages postés 9 Date d'inscription samedi 17 mai 2014 Statut Membre Dernière intervention 7 août 2014
5 juin 2014 à 15:47
je suis en train de faire une application de gestion d'une agence d'assurance j'ai deux tables client, et police
chaque client peut avoir une ou plusieurs police le champs commun entre ces deux tables c'est la CIN donc ce que je veux c'est afficher la 1ere police pour chaque client selon la date d'effet de la police.

la dernière requête que tu ma donné affiche des résultats mais quand je change le mois elle affiche d'autre polices des mêmes clients

la requête 2 affiche les bons résultats (le nombre des clients )mais mois je veux afficher deux champs nbre et mois

select count(*) as NBRE
from (
select Date_effet
from police
where month(Date_effet)=1 and YEAR(date_effet)=2013
group by date_effet) T


merci d'avance
0
jordane45 Messages postés 38135 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 13 avril 2024 344
5 juin 2014 à 16:02
Tu as deux tables.... mais dans ta requête tu n'en utilise qu'une seule ... !!?

la requête 2 affiche les bons résultats (le nombre des clients )
Ta requête te donne le nombre de ligne total retourné par la sous requête.... pour le mois que tu y a indiqué....

Si tu veux absolument partir de ta requête... il te suffit de faire :
select count(*) as NBRE
         ,month(T.Date_effet) as mois
from (
select Date_effet
from police
where month(Date_effet)=1 and YEAR(date_effet)=2013
group by date_effet) T


mais peut être ai-je mal compris ta question... et dans ce cas je t'invite à nous réexpliquer TRES clairement ce que tu souhaites obtenir.. quit à nous mettre un exemple de tes tables et du résultat à obtenir....
0
akhsas fatima zahra Messages postés 9 Date d'inscription samedi 17 mai 2014 Statut Membre Dernière intervention 7 août 2014
Modifié par akhsas fatima zahra le 5/06/2014 à 16:54
j'ai testé celle que tu m'a donné ,elle affiche un msg d'erreur


La colonne 'police.Date_effet' n'est pas valide dans la liste de sélection parce qu'elle n'est pas contenue dans une fonction d'agrégation ou dans la clause GROUP BY.
0
jordane45 Messages postés 38135 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 13 avril 2024 344
5 juin 2014 à 17:33
A mon avis tu as fait une erreur lors de la recopie de la requête car chez moi elle passe correctement.

tu peux nous copier/coller EXACEMENT la requête que tu as saisis ?
0
akhsas fatima zahra Messages postés 9 Date d'inscription samedi 17 mai 2014 Statut Membre Dernière intervention 7 août 2014
5 juin 2014 à 17:42
ben,
j'ai deux tables client et police:
client (cin,nomassurer,adresse,tel....)
police (cin,N_attestation,N_police,Date_effet,date_echeance.....)

je veux afficher le nombre des nouveaux clients pour chaque mois

par exemple: on a un client qui s'appelle gerrard il a plusieurs polices (01/01/2013 ,01/05/2013.....) la 1ere a la date du 01/01/2013
le problème de la requête que je t'ai donnée si je fait le mois 1 elle me donne le nombre de police du mois 1 parmi eux la police de gerrard et si je tape mois 5 elle me donne une autre police de gerrard du mois 5
0
akhsas fatima zahra Messages postés 9 Date d'inscription samedi 17 mai 2014 Statut Membre Dernière intervention 7 août 2014
5 juin 2014 à 17:44
je m'excuse si j'avais provoqué aucun dérangement pour vous
0
jordane45 Messages postés 38135 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 13 avril 2024 344
5 juin 2014 à 17:50
???
0
jordane45 Messages postés 38135 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 13 avril 2024 344
5 juin 2014 à 18:06
SELECT COUNT(*) as NB_cin
		,T.mois
FROM (select distinct cin ,
		min(month(p.date_effet)) as mois
		FROM police p
		WHERE month(p.date_effet)=1
		GROUP BY cin ) T
0
akhsas fatima zahra Messages postés 9 Date d'inscription samedi 17 mai 2014 Statut Membre Dernière intervention 7 août 2014
6 juin 2014 à 19:17
tjr ce msg d'erreur


" Msg 8120, Niveau 16, État 1, Ligne 2
La colonne 'T.mois' n'est pas valide dans la liste de sélection parce qu'elle n'est pas contenue dans une fonction d'agrégation ou dans la clause GROUP BY."
0
jordane45 Messages postés 38135 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 13 avril 2024 344
Modifié par jordane45 le 6/06/2014 à 19:36
Testes ceci :
SELECT COUNT(T.cin) as NB_cin
  ,T.mois
FROM (select distinct cin ,
  min(month(p.date_effet)) as mois
  FROM police p
  WHERE month(p.date_effet)=1
  GROUP BY cin ) T
GROUP BY T.cin



http://sqlpro.developpez.com/cours/sqlaz/ensembles/#L1

.
0
Rejoignez-nous