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

Développement SQL Server Discussion :

Numérotation et total à partir d'une colonne dans un résultat multi records


Sujet :

Développement SQL Server

  1. #1
    Membre chevronné Avatar de Oluha
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 183
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 183
    Points : 1 967
    Points
    1 967
    Par défaut Numérotation et total à partir d'une colonne dans un résultat multi records
    Bonjour,

    J'ai actuellement une requête qui me renvoie quelque chose de la forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    |  IDCLI  | COL1 | COL2 | COL3 |
    --------------------------------
    |   123   |  A   |  B   |  C   |
    |   123   |  D   |  E   |  F   |
    |   123   |  G   |  H   |  I   |
    |   234   |  J   |  K   |  L   |
    |   234   |  M   |  N   |  O   |
    |   321   |  P   |  Q   |  R   |
    J'aimerai numéroter les lignes sur le IDCLI et avoir le total d'IDCLI différents à coté afin d'obtenir quelque chose du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    |  IDCLI  | COL1 | COL2 | COL3 | NUM | TOTAL |
    ----------------------------------------------
    |   123   |  A   |  B   |  C   |  1  |   3   |
    |   123   |  D   |  E   |  F   |  1  |   3   |
    |   123   |  G   |  H   |  I   |  1  |   3   |
    |   234   |  J   |  K   |  L   |  2  |   3   |
    |   234   |  M   |  N   |  O   |  2  |   3   |
    |   321   |  P   |  Q   |  R   |  3  |   3   |
    J'ai regardé du coté de row_number() et rank() mais je n'arrive pas à obtenir ce que je veux...

    Quelqu'un sait comment faire ça dans une requête ?

    Merci

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    J'ai du mal à comprendre à quoi correspondent les valeurs dans les colonnes NUM et TOTAL...
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre chevronné Avatar de Oluha
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 183
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 183
    Points : 1 967
    Points
    1 967
    Par défaut
    En gros je numérote les clients à partir de leur clé IDCLI dans la colonne NUM et TOTAL correspond au nombre de clients différents renvoyé par la requête.

    IDCLI n°123 est en fait le client 1 sur 3 de ma requête, 234 est le client 2 sur 3 et 321 le client 3 sur 3.

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT  idcli
        ,   col1
        ,   col2
        ,   col3
        ,   ROW_NUMBER() OVER (ORDER BY odcli)
        ,   COUNT(DISTINCT idcli) OVER ()
    FROM    matable
    A vérifier, je n'ai pas de SGBD sous la main
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  5. #5
    Membre chevronné Avatar de Oluha
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 183
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 183
    Points : 1 967
    Points
    1 967
    Par défaut
    Le row_number() me numérote les lignes, j'ai 1, 2, 3, 4, 5, 6 dans ma colonne NUM. Et si je met partition by IDCLI, il va me faire 1, 2, 3, 1, 2, 1.

    Pour l'autre valeur, il me donne une erreur de syntaxe au niveau du distinct quand j’exécute la requête

  6. #6
    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
    Hello,

    Une solution

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select 
     *,
     DENSE_RANK() OVER (ORDER BY IDCLI) AS NUM,
     (SELECT COUNT(DISTINCT IDCLI) FROM @t) AS TOTAL
    from @t;
    Le mot clé DISTINCT n'est pas supporté avec la clause OVER(). On ne peut donc pas utiliser COUNT() OVER() dans ce cas.

    ++

  7. #7
    Membre chevronné Avatar de Oluha
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 183
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 183
    Points : 1 967
    Points
    1 967
    Par défaut
    Ah super ça fonctionne, merci !
    Je n'avais pas vu la fonction DENSE_RANK dans l'aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Toutes versions] Besoin d'un code pour vérifier l'existence d'une chaine à partir d'une colonne dans une autre
    Par Chedy Smida dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 20/02/2015, 17h05
  2. [Toutes versions] Ajouter une colonne dans un fichier dbf à partir d'ACCESS
    Par loufab dans le forum Contribuez
    Réponses: 2
    Dernier message: 13/05/2012, 13h07
  3. Réponses: 12
    Dernier message: 30/10/2008, 04h12
  4. créer une colonne dans le résultat d'une requette
    Par timal78 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 11/07/2007, 10h21
  5. [Tableaux] Total d'une colonne dans un tableau
    Par carmen256 dans le forum Langage
    Réponses: 4
    Dernier message: 25/03/2007, 12h42

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