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 :

Problème requête simple


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 56
    Points : 29
    Points
    29
    Par défaut Problème requête simple
    Bonjour

    J'ai une table x qui contient qui contient 3 colonnes (date (format date), Cyle (int 1 ou 2), Reference(varchar)).

    J'ai créé un premiere requête

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     select date, Cycle, count(reference) as volume  
    from x 
    group by date, Cycle 
    order by date
    Cela me retourne bien le nombre par jour et par cycle. Mais maintenant je voudrais savoir comment je pourrai avoir une colonne en plus qui me donne le nombre uniquement par jour.

    Merci

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 109
    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 109
    Points : 28 437
    Points
    28 437
    Par défaut
    Si ton SGBD, que tu n'a pas précisé, prend en charge les fonctions de regroupement analytique, c'est très simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT date, Cycle, COUNT(reference) AS volume
     , COUNT(reference) OVER (PARTITION BY date)
    FROM x 
    GROUP BY date, Cycle 
    ORDER BY date
    Attention : date et reference sont des mots réservés de SQL. Il est recommandé de ne pas les utiliser pour nommer des objets.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 56
    Points : 29
    Points
    29
    Par défaut
    Merci pour ta rapide réponse et tes remarques. Ma SGBD est SQLServer 2005.

    Mais ce n'est pas le résultat escompté.

    Je vais te donner des exemples.

    Dans ma première requête

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      SELECT date, Cycle, count(reference) AS volume  
    FROM x 
    GROUP BY date, Cycle 
    ORDER BY date

    Je retrouve un résultat sous la forme

    Date Cycle Volume
    01/01/08 01 1000
    01/01/08 02 1500
    02/01/08 01 2000
    02/01/08 02 2500

    Maintenant avec ta requête, elle me retourne un résultat sous la forme
    Date Cycle Volume VolumeParJour
    01/01/08 01 1000 2
    01/01/08 02 1500 2
    02/01/08 01 2000 2
    02/01/08 02 2500 2

    Tandis que je souhaiterai avoir:
    Date Cycle Volume VolumeParJour
    01/01/08 01 1000 2500
    01/01/08 02 1500 2500
    02/01/08 01 2000 4500
    02/01/08 02 2500 4500

    Et encore merci.

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 109
    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 109
    Points : 28 437
    Points
    28 437
    Par défaut
    Et avec count(*) à la place de count(reference) ?

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 56
    Points : 29
    Points
    29
    Par défaut
    Desole mais toujours pareil.

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 902
    Points : 53 143
    Points
    53 143
    Billets dans le blog
    6
    Par défaut
    Faites un GROUP BY ROLLUP et en tale dérivée éliminez les nuls (GROUPINGS()).

    A +

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 56
    Points : 29
    Points
    29
    Par défaut
    Merci pour ta réponse, j'ai essayé d'intégré le rollup

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     SELECT date, Cycle, count(reference) AS volume  
    FROM x 
    GROUP BY ROLLUP (date, Cycle) 
    ORDER BY date

    Mais cela me retourne le message d'erreur suivent

    Msg 195, Level 15, State 10, Line 1
    'rollup' n'est pas une option nom de fonction intégrée reconnue.

    Ma SGBD est SQLServer 2005.

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 56
    Points : 29
    Points
    29
    Par défaut
    J'ai trouvé mon erreur de syntaxe, et requête correct est:

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     SELECT date, Cycle, count(reference) AS volume  
    FROM x 
    GROUP BY date, Cycle,reference with rollup

    Et cela correspond bien à ce que je recherche.

    Mais maintenant je voudrais completer ma recherche avec une colone en plus

    Ex:
    J'aimerai avoir en plus un reference client

    Reference_client Date Cycle Volume
    XXXX 01/01/08 01 1000
    XXXX 01/01/08 02 1500
    YYYY 01/01/08 01 2000
    YYYY 01/01/08 02 2500
    XXXX 02/01/08 01 3000
    XXXX 02/01/08 02 3500
    YYYY 02/01/08 01 4000
    YYYY 02/01/08 02 4500

    Et je voudrai récupérer avec une requête l'information sous la forme
    Reference_client Date Cycle Volume Total_Journalier
    XXXX 01/01/08 01 1000 7000
    XXXX 01/01/08 02 1500 7000
    YYYY 01/01/08 01 2000 7000
    YYYY 01/01/08 02 2500 7000
    XXXX 02/01/08 01 3000 15000
    XXXX 02/01/08 02 3500 15000
    YYYY 02/01/08 01 4000 15000
    YYYY 02/01/08 02 4500 15000

    Mais le problème du rollup c'est qu'il me fait un sous total par reference_client, date et cycle

    Voila, j'espere avoir été assez claire.

    Merci

Discussions similaires

  1. Problème requête simple !
    Par weebo dans le forum MS SQL Server
    Réponses: 0
    Dernier message: 10/11/2011, 12h25
  2. Problème sur une requête simple dans une table simple
    Par Muso tensei dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 26/04/2009, 12h28
  3. Problème de requête simple
    Par Poisell dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 01/04/2009, 15h50
  4. Problème d'exécution d'une requête simple
    Par developppez dans le forum Requêtes
    Réponses: 6
    Dernier message: 13/03/2009, 13h10
  5. Problème tout simple : requête et liste déroulante
    Par Ellix dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 05/07/2007, 13h06

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