IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

count sur deux champs


Sujet :

MS SQL Server

  1. #1
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Points : 175
    Points
    175
    Par défaut count sur deux champs
    Bonjour, j'ai un jet de données de type

    id critere
    1 d
    1 c
    1 d

    le id existe sur une table et le critère sur une autre table liée avec la première

    je veux faire un count de telle sorte que la requête calcule dans le count uniquement les élément suivants :
    1 d
    1 c
    càd les redondances du id et critère combiné doivent être éliminé : count (distinct (id, critère))
    comment puis je faire

    merci

  2. #2
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Quelque chose comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT 
     id,
     critere,
     COUNT(*) AS nb_occurences
    FROM matable
    GROUP BY id, critere
    ++

  3. #3
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Points : 175
    Points
    175
    Par défaut
    Merci pour votre réponse
    sauf que l'information du id, critère n'est pas importantes je veux pas l'afficher le count(*) = c'est ce que je cherche exactement pace que le but c'est de connaitre le total des échange avec un client qui est le count(id) mais pour renforcer la requête et éviter les doublons je dois ajouter un autre critère de recherche qui est 'critère', cela va répondre exactement a ma requête qui est :

    client total échange sans redondance

    j'espère que c'est clair

  4. #4
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Donne nous ton exemple complet, cela nous permettra de mieux t'aider.

    ++

  5. #5
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Points : 175
    Points
    175
    Par défaut
    Je ne sais pas quoi ajouter en plus

    J'ai trois tables :

    tables 1( id_c, id)
    table 2 (id_c FK, client)
    table 3 (id_c fk, id_t3)

    le critère pour renforcer ma requête c'est id_t3

    je souhaite savoir par 'client' le count des lignes unique (id,id_t3) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select client,count(id, id_t3) from t1,t2,t3
    group by client

  6. #6
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 950
    Points : 5 849
    Points
    5 849
    Par défaut
    Qu'est ce que ça donne avec une fonction analytique ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select distinct t2.client, 
           count(distinct t3.id_t3) over (partition by t2.client, t1.id) as nb_distinct_critere
      from table2 t2
      join table1 t1 on t1.id_c = t2.id_c
      join table3 t3 on t3.id_c = t2.id_c

  7. #7
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Points : 175
    Points
    175
    Par défaut
    pourriez vous m'expliquer svp cette partie veut dire quoi exactement :

    over (partition BY t2.client, t1.id) AS nb_distinct_critere

  8. #8
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 950
    Points : 5 849
    Points
    5 849
    Par défaut
    C'est un peu "comme" d'un GROUP BY mais sans réduire le nombre de ligne :
    http://msdn.microsoft.com/fr-fr/libr...ql.105%29.aspx

Discussions similaires

  1. COUNT DISTINCT sur deux champs
    Par Ceubex dans le forum Langage SQL
    Réponses: 1
    Dernier message: 08/01/2014, 15h11
  2. Deux count sur même champ avec conditions différentes
    Par steerayInFrance dans le forum Développement
    Réponses: 4
    Dernier message: 14/06/2011, 14h20
  3. pb avec select sur deux champs
    Par graphicsxp dans le forum Langage SQL
    Réponses: 7
    Dernier message: 22/03/2005, 15h30
  4. contrainte sur deux champs d'une table
    Par bdkiller dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 17/09/2004, 18h26
  5. 2 Count() sur deux tables en jointures gauches
    Par Alexandre T dans le forum Langage SQL
    Réponses: 2
    Dernier message: 03/09/2003, 16h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo