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 :

[ACCESS]Solution pour requête SQL


Sujet :

Langage SQL

  1. #1
    Membre habitué
    Profil pro
    Chef d’entreprise
    Inscrit en
    Mars 2002
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chef d’entreprise

    Informations forums :
    Inscription : Mars 2002
    Messages : 212
    Points : 149
    Points
    149
    Par défaut [ACCESS]Solution pour requête SQL
    Bonjour, j'ai la table suivante :
    TABLE
    REF Valide Disponible Date
    a oui oui 19/07/2007
    b oui OUI 19/07/2007
    b oui oui 20/07/2007
    a oui oui 20/07/2007
    d non non 20/07/2007
    a NON non 20/07/2007
    z NON non 20/07/2007
    b non oui 20/07/2007
    b NON non 20/07/2007
    b non oui 21/07/2007
    b NON non 22/07/2007
    b NON non 23/07/2007
    b oui oui 24/07/2007
    J'ai du mal à créer une requête permettant de donner pour une référence donné entre deux dates données
    Le nombre total d'enregistrement
    Le nombre de disponibles
    le nombre de valides
    le nombre de non valides

    Exemple pour une date comprise entre 19/07 et 20/07 :

    RESULTAT ATTENDU
    Ref TOTAL DisponibleValide NON VALIDE
    A 3 2 2 0
    B 4 3 2 1
    D 1 0 0 0
    Z 1 0 0 1
    Merci

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    ATTENTION : si je vous suis bien, votre exemple est partiellement faux : Cf. le résultat attendu pour la colonne "non_valide".

    Soit la table DVP suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TABLE DVP(
      REF     VARCHAR2(1),
      VALIDE  VARCHAR2(1),
      DISPO   VARCHAR2(1),
      DT      DATE
    );
    La requête que vous recherchez est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT    REF,
              COUNT(*),
              SUM( CASE WHEN VALIDE = 'O' THEN 1 ELSE 0 END) VAL,
              SUM( CASE WHEN DISPO  = 'O' THEN 1 ELSE 0 END) DISP,
              SUM( CASE WHEN VALIDE = 'O' THEN 0 ELSE 1 END) NON_VAL
    FROM      DVP
    WHERE     DT BETWEEN TO_DATE('19/07/2007', 'DD/MM/YYYY') AND TO_DATE('20/07/2007', 'DD/MM/YYYY')
    GROUP BY  REF
    ORDER BY  REF
    Remarque : la gestion des dates dans la clause WHERE est spécifique à Oracle à adapter selon votre SGBD que vous n'avez pas précisé !!!!

  3. #3
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2007
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2007
    Messages : 193
    Points : 207
    Points
    207
    Par défaut
    Cela te ferait 4 count() dans ta requette SQL, même avec un LEFT OUTTER JOIN, je ne suis pas sur que ce soit possible surtout avec une seule table.

    A ta place je ferai 4 requettes ce serait plus simple, si ta bd est enorme ajoute des index.

    Pour un projet j'ai du faire des compteurs sur 4 types d'éléments, j'ai procédé par une requette à chaque fois. Sur 2.5 millions d'enregistrement dans la base ça prenait même pas 1 seconde avec les aller retour Apache <-> SQL sur une machine à la retraite a bout de souffle.

    EDIT: arf Magnus a été plus rapide. Jolie ta requete, faut que j'épluche, ça parait super intéréssant.

  4. #4
    Membre habitué
    Profil pro
    Chef d’entreprise
    Inscrit en
    Mars 2002
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chef d’entreprise

    Informations forums :
    Inscription : Mars 2002
    Messages : 212
    Points : 149
    Points
    149
    Par défaut
    Je travaille sur access.
    J'ai essayé cette méthode et j'ai obtenu le message d'erreur suivant :

    Opérateur absent dans l'expression
    SUM( CASE WHEN VALIDE = 'O' THEN 1 ELSE 0 END) VAL,

  5. #5
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 102
    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 102
    Points : 28 401
    Points
    28 401
    Par défaut
    Access ne connaît pas l'instruction SQL CASE.
    Tu peux utiliser IF() pour le remplacer...

  6. #6
    Membre habitué
    Profil pro
    Chef d’entreprise
    Inscrit en
    Mars 2002
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chef d’entreprise

    Informations forums :
    Inscription : Mars 2002
    Messages : 212
    Points : 149
    Points
    149
    Par défaut
    J'ai vérifié dans l'aide d'Access. If ne figure pas parmi les mots clés d'access.

  7. #7
    jnore
    Invité(e)
    Par défaut
    C'est pas IF mais IIF(expression;vrai;faux)

  8. #8
    Membre habitué
    Profil pro
    Chef d’entreprise
    Inscrit en
    Mars 2002
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chef d’entreprise

    Informations forums :
    Inscription : Mars 2002
    Messages : 212
    Points : 149
    Points
    149
    Par défaut
    Après plusieurs essais/erreurs, la requête avec la bonne syntaxe acess est la suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT REF, COUNT(*) AS total, SUM ( iif( VALIDE='o', 1,0)) AS VAL, SUM( iif( DISPO  ='o', 1,0)) AS DISP, SUM( iif(valide ='o', 0,1)) AS NON_VAL
    FROM DVP
    WHERE DT BETWEEN #19/07/2007# AND #20/07/2007#
    GROUP BY REF
    ORDER BY REF;
    MERCI pour votre aide

  9. #9
    Membre habitué
    Profil pro
    Chef d’entreprise
    Inscrit en
    Mars 2002
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chef d’entreprise

    Informations forums :
    Inscription : Mars 2002
    Messages : 212
    Points : 149
    Points
    149
    Par défaut
    Citation Envoyé par ZIED Voir le message
    Après plusieurs essais/erreurs, la requête avec la bonne syntaxe acess est la suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT REF, COUNT(*) AS total, SUM ( iif( VALIDE='o', 1,0)) AS VAL, SUM( iif( DISPO  ='o', 1,0)) AS DISP, SUM( iif(valide ='o', 0,1)) AS NON_VAL
    FROM DVP
    WHERE DT BETWEEN #19/07/2007# AND #20/07/2007#
    GROUP BY REF
    ORDER BY REF;
    MERCI pour votre aide
    Je reprends ce problème d'un autre côté.
    Je veux maintenant faire une requête qui fait la même chose avec les contraintes suivantes :
    Je veux pendre en compte les résultats pour une valeur unique du champ REF. et cette valeur doit correspondre à une valeur max du champ date.

    exemple pour la REF B : je ne veux prendre en considération que l'enregistrement suivant :
    b oui oui 24/07/2007

Discussions similaires

  1. Aide pour requête SQL sous Access
    Par la bulle dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 05/05/2009, 08h16
  2. Problème pour requête SQL LIKE avec ACCESS
    Par ar.aziz dans le forum VB.NET
    Réponses: 2
    Dernier message: 02/07/2008, 10h53
  3. Besoin d'aide pour requête SQL
    Par vallica dans le forum Requêtes
    Réponses: 10
    Dernier message: 08/06/2006, 23h16
  4. [MySQL] Problème récupération variable pour requête SQL !!
    Par mLk92 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 01/06/2006, 16h08
  5. Variable invisible pour requête SQL !?
    Par yopuke dans le forum Langage
    Réponses: 26
    Dernier message: 11/05/2006, 16h44

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