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 :

Regroupement de lignes


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 64
    Points : 53
    Points
    53
    Par défaut Regroupement de lignes
    bonjour, je travaille avec une base Postgres mais je ne crois pas que cela ait de l'importance pour répondre à ma question :
    je travaille avec une table RAYON qui a la structure suivante :
    Num| Date |Nom |CA|
    --------------------------
    1 |25/01/2007|Ray1|10
    2 |25/01/2006|Ray2|8
    1 |25/01/2006|Ray1|21
    2 |25/01/2006|Ray2|9

    je voudrais écrire une requete qui me regroupe les CA pour chaque rayon sur une seule ligne c'est-à dire :
    Num|Nom |CA courant|CA précédent
    ----------------------------------
    1 |Ray1|10 |21
    2 |Ray2|8 |9

    est-ce possible? et si oui, comment??
    merci d'avance pour vos réponses.

  2. #2
    Membre éprouvé Avatar de Mathusalem
    Profil pro
    IT moa
    Inscrit en
    Décembre 2003
    Messages
    1 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : IT moa

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 008
    Points : 1 067
    Points
    1 067
    Par défaut
    qu'est ce qu'un CA "courant" ?

    Dans ton exemple ray2 a ses 2 CA à la même date.

    Citation Envoyé par 78alex78
    Num| Date |Nom |CA|
    --------------------------
    1 |25/01/2007|Ray1|10
    2 |25/01/2006|Ray2|8
    1 |25/01/2006|Ray1|21
    2 |25/01/2006|Ray2|9


    Num|Nom |CA courant|CA précédent
    ----------------------------------
    1 |Ray1|10 |21
    2 |Ray2|8 |9

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 64
    Points : 53
    Points
    53
    Par défaut
    désolée :
    Num| Date |Nom |CA|
    --------------------------
    1 |25/01/2007|Ray1|10
    2 |25/01/2007|Ray2|8
    1 |25/01/2006|Ray1|21
    2 |25/01/2006|Ray2|9


    Num|Nom |CA courant|CA précédent
    ----------------------------------
    1 |Ray1|10 |21
    2 |Ray2|8 |9

    Le ca courant est le CA au 25/01/2007 et le ca précédent, celui au 25/01/2006.

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    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 080
    Points : 30 801
    Points
    30 801
    Par défaut
    Comme cela :
    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 A.NUM
     , A.CA
     , A.NOM
     , coalesce(B.CA, 0)
    from MATABLE as A
     left join
      MATABLE as B
      on A.NUM = B.NUM
      and A.DATE > B.DATE
      and exists ( select 1
          from MATABLE as D2
          group by NUM
          where D2.NUM = B.NUM
           and D2.DATE < A.DATE
          having max(D2.DATE) = B.DATE
         )
    where exists ( select 1
         from MATABLE as D1
         group by NUM
         where D1.NUM = A.NUM
         having max(D1.DATE) = A.DATE
        )
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 64
    Points : 53
    Points
    53
    Par défaut
    Citation Envoyé par al1_24
    Comme cela :
    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 A.NUM
     , A.CA
     , A.NOM
     , coalesce(B.CA, 0)
    from MATABLE as A
     left join
      MATABLE as B
      on A.NUM = B.NUM
      and A.DATE > B.DATE
      and exists ( select 1
          from MATABLE as D2
          group by NUM
          where D2.NUM = B.NUM
           and D2.DATE < A.DATE
          having max(D2.DATE) = B.DATE
         )
    where exists ( select 1
         from MATABLE as D1
         group by NUM
         where D1.NUM = A.NUM
         having max(D1.DATE) = A.DATE
        )
    Rien à dire, ça fonctionne parfaitement. par contre, j'ai pas bien tout compris...tu pourrais m'expliquer rapidement ce que fait la requete??
    merci en tous cas, c'est super.

  6. #6
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    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 080
    Points : 30 801
    Points
    30 801
    Par défaut
    Citation Envoyé par 78alex78
    Rien à dire, ça fonctionne parfaitement. par contre, j'ai pas bien tout compris...tu pourrais m'expliquer rapidement ce que fait la requete??
    merci en tous cas, c'est super.
    Quelques commentaires :
    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 A.NUM
     , A.CA
     , coalesce(B.CA, 0) -- S'il n'y a pas de date antérieure, retourner 0
    from MATABLE as A
     left join -- Il est possible que tous les rayons n'aient pas deux dates
      MATABLE as B
      on A.NUM = B.NUM
      and A.DATE > B.DATE -- La date de B est antérieure à celle de A 
      and exists ( select 1
          from MATABLE as D2
          group by NUM
          where D2.NUM = B.NUM
           and D2.DATE < A.DATE
          having max(D2.DATE) = B.DATE
          -- => La plus grande date antérieure à A.DATE pour chq NUM
         )
    where exists ( select 1
         from MATABLE as D1
         group by NUM
         where D1.NUM = A.NUM
         having max(D1.DATE) = A.DATE
         -- => La plus grande date pour chaque NUM
        )
    Le prédicat exists permet de faire des jointures complexes que in ne permettrait pas et join moins facilement.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 64
    Points : 53
    Points
    53
    Par défaut
    OK, génial. encore un grand énorme merci.

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

Discussions similaires

  1. Gridview, regroupement de lignes
    Par cchevalier72 dans le forum ASP.NET
    Réponses: 16
    Dernier message: 13/06/2007, 11h28
  2. [Reporting services] Regroupement de lignes sous un +
    Par titecaro dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 10/05/2007, 11h08
  3. Regrouper des lignes
    Par xenos dans le forum Excel
    Réponses: 2
    Dernier message: 12/03/2007, 16h49
  4. Réponses: 8
    Dernier message: 02/03/2007, 16h37
  5. [vbexcel]tri ou regroupement de ligne en fonction de valeur.
    Par Mugette dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 12/12/2005, 18h22

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