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

Bases de données Delphi Discussion :

faire un count pour chaque resultat du select en mêm temps


Sujet :

Bases de données Delphi

  1. #1
    Nouveau membre du Club
    Inscrit en
    Octobre 2004
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 61
    Points : 28
    Points
    28
    Par défaut faire un count pour chaque resultat du select en mêm temps
    Bonjour TLM

    je fait un select Distinct EXEQ pour afficher le résultat dans DBGrid,

    et je veut en même temps recuperer chaque fois le resultat du select

    ( c'est a dire si le SELECT a génerer trois résultats de EXEQ

    mois je veut récuperer chaque fois un des ses résultat du select pour faire du

    count(*) sur un autre champs

    j'ai un exemple le voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
     
    SELECT mailboxnumber, SUM(NB1), SUM(NB2), SUM(NB3) 
    FROM 
    ( 
    select c.mailboxnumber, count(*) as NB1, 0 as NB2, 0 as NB3 
    from BPMMessages as m, BPMCustomers as c 
    where c.mailboxnumber=80001 
     
    UNION 
    select c.mailboxnumber, 0 AS NB1, count(*) as NB2, 0 as NB3 
    from BPMMessages as m, BPMCustomers as c, BPMWorkersActions as w 
    where c.mailboxnumber=80001 
     
     
    UNION 
    select c.mailboxnumber, 0 as NB1, 0 as NB2, count(*) as NB3 
    from BPMMessages as m, BPMCustomers as c, BPMMailTypes as mt 
    where c.mailboxnumber=80001 
     
     
    ) 
    GROUP BY mailboxnumber
    je ve que chaque count depand du ce que génere select a chaque fois !

    a vous mes amies

  2. #2
    Nouveau membre du Club
    Inscrit en
    Octobre 2004
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 61
    Points : 28
    Points
    28
    Par défaut
    voici un exemple

    par exemple si un champs C1 contient des prenoms, et un autre C2 qui contient des valeurs X et Y,

    je veux afficher tous les prenoms sans répetition et pour chaque prenom, le nombre où ce prenom vaut 1 dans une colonne CVAL1 ( si C2 = X) pour le même prenom le nombre où ce prenom vaut2 dans une colonne CVAL2 ( si C2 = Y)

    et tous cela sera afficher soit dans un DBGrid soit dans une nouvelle table avec les champs PRENOM, CVAL1, CVAL2, exemple :




    NOM | C1 | C2
    ------------------------------
    BARAU | ROBERT| X
    SAMAD | DAVID | X
    ALAIN | ROBERT | X
    SADOU | DAVID | Y



    PRENOM | CVAL1 | CVAL2
    -------------------------------
    ROBERT | 2 | 0
    DAVID | 1 | 1

    je ne sais pas si c'est possible de faire une tel opération !!!

  3. #3
    Nouveau membre du Club
    Inscrit en
    Octobre 2004
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 61
    Points : 28
    Points
    28
    Par défaut
    donc le resultat sera comme l'indique le deuxieme tableau de l'exemple

  4. #4
    Rédacteur
    Avatar de Giovanny Temgoua
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2003
    Messages
    3 830
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2003
    Messages : 3 830
    Points : 4 006
    Points
    4 006
    Par défaut
    a vous mes amies
    Il n'y a pas ques filles ici

    Sinon comme ton SGBD (lequel ? ) supporte UNION, je proposerai un truc comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT DISTINCT C1 AS PRENOM
    FROM TABLE
    UNION
    SELECT COUNT(C1)
    FROM TABLE
    WHERE C2=X
    UNION
    SELECT COUNT(C1)
    FROM TABLE
    WHERE C2=Y
    le problème est que pour les requêtes UNION, les deux requêtes (si je ne me trompe) doivent avoir le même nombre de ligne donc cà ne marchera pas toujours.

    Le problème étant plus lié à une requête, peut tu être tu trouveras une aide plus efficace dans le forum SQL

    A+

    PS : dis le moi par MP si tu veux que je déplace et précise ton SGBD.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Octobre 2004
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 61
    Points : 28
    Points
    28
    Par défaut
    mais comment avoir les deux colonnes CVAL1 et CVAL2, sinon ou on va mettre le resultat de count , est ce qu'on peut faire un

    select count(*) as CVAL1 ......

  6. #6
    Nouveau membre du Club
    Inscrit en
    Octobre 2004
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 61
    Points : 28
    Points
    28
    Par défaut
    je vais donner un exemple :

    ma table :

    AVIONS | NAT |
    --------------------
    A300--- |-- 1
    A310 ---|-- 1
    A321--- |-- 3
    B727 ---|-- 3
    B732--- |-- 1
    A300--- |-- 1
    A310--- |-- 3
    A300 ---|-- 1
    B727--- |-- 3

    1 : designe international
    3 : designe domestique

    je veux avoir dans mon DBGrid (et avec n'importe qu'elle solution) une table comme celle ci

    AVIONS | INTERNATIONAL | DOMESTIQUE | TOTAL
    ---------------------------------------------------------------
    A300 ---| -----3 -------------| -------0--------|---- 3
    A310--- | ------1------------ |--------1------- |-----2
    A321----|------ 1------------ |------- 0------- |---- 1
    B727--- | ------0------------ |------- 2------- |---- 2
    B732 ---|------ 1------------ |------- 0------- |---- 1

    pour chaque avions, le champ INTERNATIONAL signifie le nombre de fois ou un avion (pour chaque avion) a fait de vol international (où nat = 1),

    le champ DOMESTIQUE signofie le nombre de fois pour chaque avions a fait des vols domestqie (où nat = 3)

    le champ total est la somme des champs international et domestique

  7. #7
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Ce que tu veux faire n'est pas réalisable.

    Avec les requetes tu ne peux avoir qu'un resultat en ligne pas en colonne
    Donc il faut que tu récupéres tes données formatés le plus simplement possible afin de les traduires après en colonnes.

    genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Select disctinct C1,C2,count(C2) from Table
    Group by C1,C2
    Order by C1,C2
    ca te donnera un resultat du style :

    C1 | C2 | Count
    -------------------------------
    DAVID | X | 1
    DAVID | Y | 1
    ROBERT | X | 2

    Apres a toi de le transmettre à ta grille
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  8. #8
    Membre expérimenté
    Avatar de Bloon
    Homme Profil pro
    Consultant Freelance
    Inscrit en
    Avril 2002
    Messages
    467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant Freelance
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2002
    Messages : 467
    Points : 1 339
    Points
    1 339
    Par défaut
    si c'est possible, par exemple sous Oracle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT DISTINCT AVION.NOM,
           I.COMPTEUR INTERNATIONAL,
           D.COMPTEUR DOMESTIQUE,
           NVL(I.COMPTEUR,0) + NVL(D.COMPTEUR,0) TOTAL
    FROM AVION,
         (SELECT NOM, COUNT(*) COMPTEUR FROM AVION AV1 WHERE AV1.NAT='1' GROUP BY NOM) I,
         (SELECT NOM, COUNT(*) COMPTEUR FROM AVION AV3 WHERE AV3.NAT='3' GROUP BY NOM) D
    WHERE AVION.NOM = I.NOM (+)
    AND AVION.NOM = D.NOM (+)
    Bloon
    A lire : Les règles du club
    Delphi : La FAQ - Articles

  9. #9
    Nouveau membre du Club
    Inscrit en
    Octobre 2004
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 61
    Points : 28
    Points
    28
    Par défaut
    je ne sais pas si ca va marcher sous Delphi et avec des tables PARADOX (sans utiliser un SGBD tel que MySql OU sQL sERVEUR ...

  10. #10
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Citation Envoyé par Bloon
    si c'est possible, par exemple sous Oracle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT DISTINCT AVION.NOM,
           I.COMPTEUR INTERNATIONAL,
           D.COMPTEUR DOMESTIQUE,
           NVL(I.COMPTEUR,0) + NVL(D.COMPTEUR,0) TOTAL
    FROM AVION,
         (SELECT NOM, COUNT(*) COMPTEUR FROM AVION AV1 WHERE AV1.NAT='1' GROUP BY NOM) I,
         (SELECT NOM, COUNT(*) COMPTEUR FROM AVION AV3 WHERE AV3.NAT='3' GROUP BY NOM) D
    WHERE AVION.NOM = I.NOM (+)
    AND AVION.NOM = D.NOM (+)
    Bloon
    Sympa comme requete, mais compteur (y a une fonction count aussi ?) est spécifique à oracle non ? Puis des requetes à la place d'une table, je sais pas si d'autres SGBD le font.
    De plus il utilise des bases paradox et le SQL de tel base de données est quand même assez limité.
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  11. #11
    Nouveau membre du Club
    Inscrit en
    Octobre 2004
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 61
    Points : 28
    Points
    28
    Par défaut
    c'est pas forcement donner une solution avec un requête SQL, s'il y'a d'autre

    façon (tel que un tableau Excel ou autre chose) j'attend une proposition,

    l'essentiel et que je me sauve de ce problème car j'ai perdu deja plus d'une

    semaine avec, !!!

  12. #12
    Membre expérimenté
    Avatar de Bloon
    Homme Profil pro
    Consultant Freelance
    Inscrit en
    Avril 2002
    Messages
    467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant Freelance
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2002
    Messages : 467
    Points : 1 339
    Points
    1 339
    Par défaut
    Citation Envoyé par Malatar
    Sympa comme requete, mais compteur (y a une fonction count aussi ?) est spécifique à oracle non ?
    compteur c'est juste le renommage de la fonction count(*). Je ne pense pas qu'il y ait des fonctions spécifiques Oracle qui soient en français :-)

    Puis des requetes à la place d'une table, je sais pas si d'autres SGBD le font.
    je n'ai pas testé, mais les SGBD "sérieux" je pense que oui

    De plus il utilise des bases paradox et le SQL de tel base de données est quand même assez limité.
    Effectivement, ça ne fonctionnera pas sous Paradox

    Bloon
    A lire : Les règles du club
    Delphi : La FAQ - Articles

Discussions similaires

  1. [9.1] Faire une somme pour chaque table désirée ?
    Par vandman dans le forum Requêtes
    Réponses: 4
    Dernier message: 04/03/2015, 17h34
  2. Réponses: 3
    Dernier message: 04/07/2012, 13h33
  3. Réponses: 3
    Dernier message: 05/03/2007, 15h02
  4. [Requête] faire la somme des max pour chaque utilisateur
    Par novices dans le forum Langage SQL
    Réponses: 3
    Dernier message: 13/02/2007, 11h45
  5. Exécuter procédure pour chaque ligne d'un Select
    Par Thomad dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 17/08/2006, 08h58

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