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

Langage SQL Discussion :

Count et sous requêtes


Sujet :

Langage SQL

  1. #1
    Membre du Club

    Inscrit en
    Janvier 2005
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 48
    Points : 61
    Points
    61
    Par défaut Count et sous requêtes
    Bonjour,

    J'effectue la migration d'une vieille application Delphi de Paradox vers Firebird. Je fais actuellement trois requêtes pour remplir une variable de type Array et je me demande s'il ne serait pas possible de tout regrouper en une seule requête.
    Les 3 requêtes sont :

    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
    Select Abotype , Count(*) as Debiteur from reprise
    Where client = :IdClient
    And Carte Is Null
    And FDAte Is Not Null
    Group By AboType
     
    Select Abotype , count(*) as Surnumeraire from reprise
    Where client = :IdClient
    And Carte = -2
    Group By AboType
     
    Select Abotype , Count(*) as Perime from reprise
    Where client = :IdClient
    And Carte = -1
    Group By AboType
    merci de votre aide

  2. #2
    Expert éminent sénior
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Comme les conditions de restriction ne sont pas les mêmes sur les trois requêtes, ça me semble difficile.

  3. #3
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 394
    Points
    18 394
    Par défaut
    On pourrait le faire comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      SELECT Abotype, Carte, count(*)
        FROM reprise
       WHERE client = :IdClient
         AND (Carte in (-2, -1) 
          OR (Carte IS NULL AND FDAte IS NOT NULL))
    GROUP BY AboType, Carte
    Il faut rajouter une donnée dans le SELECT pour faire la distinction entre vos trois requêtes.

  4. #4
    Membre averti Avatar de delphine35
    Femme Profil pro
    Analyste BO
    Inscrit en
    Novembre 2009
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyste BO

    Informations forums :
    Inscription : Novembre 2009
    Messages : 265
    Points : 377
    Points
    377
    Par défaut
    ou

    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
     
    SELECT Abotype , "Debiteur" as Typ, Count(*) as Nbre  FROM reprise
    WHERE client = :IdClient
    AND Carte IS NULL
    AND FDAte IS NOT NULL
    GROUP BY AboType
     
    UNION
     
    SELECT Abotype , "Surnumeraire" as Typ, count(*) AS Nbre FROM reprise
    WHERE client = :IdClient
    AND Carte = -2
    GROUP BY AboType
     
    UNION
     
    SELECT Abotype , "Perime" as Typ, Count(*) AS Nbre FROM reprise
    WHERE client = :IdClient
    AND Carte = -1
    GROUP BY AboType
     
    ORDER BY Abotype, Typ

  5. #5
    Membre du Club

    Inscrit en
    Janvier 2005
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 48
    Points : 61
    Points
    61
    Par défaut
    Merci à tous !
    La solution de Waldar a résolu mon problème.

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

Discussions similaires

  1. COUNT dans sous-requête
    Par Maryy dans le forum Langage SQL
    Réponses: 4
    Dernier message: 14/02/2014, 18h44
  2. Count Distinct sous requête
    Par BiM dans le forum Langage SQL
    Réponses: 17
    Dernier message: 19/06/2012, 16h31
  3. Problème sous-requête MAX et COUNT
    Par grafistolage dans le forum Requêtes
    Réponses: 6
    Dernier message: 06/07/2010, 10h08
  4. Réponses: 1
    Dernier message: 22/12/2008, 11h15
  5. Réponses: 3
    Dernier message: 18/05/2003, 01h16

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