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

WinDev Discussion :

Requête SQL count


Sujet :

WinDev

  1. #1
    Membre actif
    Inscrit en
    Avril 2009
    Messages
    308
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 308
    Points : 231
    Points
    231
    Par défaut Requête SQL count
    Bonjour.

    Je n'arrive pas à trouver comment coder une requête.

    Je vous explique ce qu'elle doit me retourner.

    Les transactions pour chaque outil ,d'un employé donné en paramètre.
    Avec le nombre de fois qu'il a sorti cet outil.
    Le nombre de fois qu'il l'a retourné.
    + des infos de cet transaction.

    J'essaye ceci :
    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
     
    SELECT
    COUNT(Transaction.Type_modif),
    Outils.Designation,
    Outils.Code_barre,
    Transaction.Date_pret,
    Transaction.Date_retour,
    Transaction.Date_retourReel,
    Transaction.Etat_pret,
    Transaction.Etat_retour
    FROM
    Transaction,
    Outils
    WHERE Transaction.Code_barre_Employe={param1}
    AND 
    Transaction.Code_barre_outil=Outils.Code_barre
    GROUP BY
    Outils.Code_barre
    Transaction.type_modif a pour valeur "Sortie" ou "Retour"

    mais cela ne marche pas...

    Merci d'avance pour votre aide.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    "Ca ne marche pas", c'est plutôt vague...

    Je vois quand même un problème avec ta requête : il faut mettre toutes les colonnes de la requête dans le group by:
    Code SQL : 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
    24
     
    SELECT
    COUNT(Transaction.Type_modif),
    Outils.Designation,
    Outils.Code_barre,
    Transaction.Date_pret,
    Transaction.Date_retour,
    Transaction.Date_retourReel,
    Transaction.Etat_pret,
    Transaction.Etat_retour
    FROM
    Transaction,
    Outils
    WHERE Transaction.Code_barre_Employe={param1}
    AND 
    Transaction.Code_barre_outil=Outils.Code_barre
    GROUP BY
    Outils.Designation,
    Outils.Code_barre,
    Transaction.Date_pret,
    Transaction.Date_retour,
    Transaction.Date_retourReel,
    Transaction.Etat_pret,
    Transaction.Etat_retour

    Tatayo.

  3. #3
    Membre actif
    Inscrit en
    Avril 2009
    Messages
    308
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 308
    Points : 231
    Points
    231
    Par défaut
    désolé mais en faite je fais fausse route depuis le début.

    Il faut que je sélectionne les transactions de l'employé désiré.
    Que je compte ses sortie.
    Ses retour.
    Classé par outil
    + rupture sur type d'outil

    une sortie c'est : une transaction qui a une date de prêt comprise entre 2 date en paramètre.

    un retour c'est une transaction qui a une date de retour comprise entre 2 date en paramètre ET que la date de retour n'est pas égale à 0.( si 0 ça veut dire que mon outil est encore dehors) donc le compteur ne doit pas faire +1.

    Voici mon nouveau code :
    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
    24
    25
    SELECT DISTINCT
        Outils.Designation AS Designation,   
        COUNT(Transaction.Date_pret) AS Comptage_2,   
        COUNT(Transaction.Date_retourReel) AS Comptage_1,   
        Type.Type AS Type
    FROM
        Type,   
        Outils,   
        Transaction
    WHERE
            Type.IDType    =    Outils.IDType
        AND    Outils.Code_barre    =    Transaction.Code_barre_outil
        AND
        (
            Transaction.Code_barre_employe = {Param1}
            AND   
            (
                Transaction.Date_retourReel BETWEEN {Param2} AND {Param3}
                OR    Transaction.Date_pret BETWEEN {Param2} AND {Param3}
            )
     
        )
    GROUP BY
        Type.Type,
        Outils.Designation
    Donc ça me compte bien mes retour et sorti...mais sur la même condition.
    Comment avoir le même résultat mais mon compteur 1 doit compter selon une condition. et mon compteur 2 selon une autre condition.

    J'espère avoir éclaircie le souci.

  4. #4
    Expert confirmé
    Homme Profil pro
    ?
    Inscrit en
    Juillet 2002
    Messages
    2 378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ?

    Informations forums :
    Inscription : Juillet 2002
    Messages : 2 378
    Points : 4 494
    Points
    4 494
    Par défaut
    Bonjour
    J'ai survolé le message mais je pense que pour compter les sorties et les retours il faut 2 requêtes
    Dans un même GROUP BY chaque opération de regroupement ne peut pas avoir son propre filtre, le filtre est commun à toutes les opérations.

    Ou alors passer par des sous-requêtes mais si tu es en HF je en suis pas qûr que ça soir accepté

  5. #5
    Membre actif
    Inscrit en
    Avril 2009
    Messages
    308
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 308
    Points : 231
    Points
    231
    Par défaut
    C'est exactement mon problème.

    Alors j'ai pensé à une Jointure. Je fais 2 requêtes qui comptent 2 choses différentes.

    La ça me compte bien mes 2 compteurs qui on 2 conditions différentes.


    Mais comment y ajouter un group by outils.désignation et type.type unique pour ses 2 jointures ?

    On ma filé un exemple qui donne approximativement ce que je veux. Mais j'ai essayé de l'adapter à mes tables, et j'ai une erreur sur COUNT "Count ne peux pas etre en dehors d'un Select"

    Voici le code si ça peut aider.
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    bon sur msql j ai fais une table "transaction"
    /***************************************
    --
    -- Structure de la table `transaction`
    --
    CREATE TABLE IF NOT EXISTS `transaction` (
      `id` int(11) NOT NULL,
      `type` int(11) NOT NULL,
      `label1` text,
      `label2` text,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    --
    -- Contenu de la table `transaction`
    --
    INSERT INTO `transaction` (`id`, `type`, `label1`, `label2`) VALUES
    (1, 1, 'bob', 'jean'),
    (2, 2, 'bob', 'fred'),
    (3, 1, 'bob', 'trouver'),
    (4, 1, 'bob', NULL),
    (5, 2, 'arthur', NULL),
    (6, 2, 'bob', NULL),
    (7, 1, 'bob', NULL),
    (8, 1, 'bob', NULL);
    /*******************************************
    j'execute ca :
     
    SELECT DISTINCT label1, SUM( OK ) AS nbType1, SUM( EC ) AS nbType2
    FROM (
     
     
    SELECT DISTINCT label1, (
     
    CASE WHEN TYPE =1
    THEN COUNT(
    TYPE )
    ELSE 0
    END
    ) AS OK, (
     
    CASE WHEN TYPE =2
    THEN COUNT(
    TYPE )
    ELSE 0
    END
    ) AS EC
    FROM transaction
    WHERE LABEL1 = 'bob'
    GROUP BY TYPE
    ) AS fred
     
     
    et j 'obtient
    -------------------
    | label1 | OK | EC |
    -------------------
    |          |     |      |
    |    bob |    5|    2|
    |          |     |      |
    Voici ce que j'arrive a avoir au final. J'arrive presque au bout sauf qu'il me manque les résultat de la seconde requête.

    voici l'image :


Discussions similaires

  1. Requête sql count(*) et divers calcul
    Par Smoki28 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 07/07/2014, 13h40
  2. [AC-2010] requête sql count
    Par ambact dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 30/08/2012, 21h01
  3. Problème requête SQL COUNT
    Par 30avril1989 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 02/06/2010, 13h55
  4. Récupérer le résultat d'une requête SQL (count)
    Par niano dans le forum VBA Access
    Réponses: 6
    Dernier message: 07/09/2007, 11h41
  5. Problème de requête SQL avec DISTINCT et COUNT ?
    Par [ZiP] dans le forum Langage SQL
    Réponses: 4
    Dernier message: 29/01/2007, 17h11

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