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 :

Jointure sql récursive


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2009
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 126
    Par défaut Jointure sql récursive
    Bonjour.
    Je flanche sur la requête SQL suivante :

    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
     
    SELECT
    	Client.Nom,
    	Client.IDClient,
    	Client.Ville,
    	COUNT(Janvier.IDCommande) AS NbrJanvier,
    	COUNT(Fevrier.IDCommande) AS NbrFevrier
    FROM
    	Client
    	LEFT JOIN Commande AS Janvier ON Janvier.Client = Client.IDClient
    	AND  Janvier.DateCommande BETWEEN '20120101' AND '20120131'
    	LEFT JOIN Commande AS Fevrier ON Fevrier.Client = Client.IDClient
    	AND  Fevrier.DateCommande BETWEEN '20120201' AND '20120229'
    GROUP BY
    	Nom,
    	IDClient,
    	Ville
    ORDER BY
    	Nom
    Je souhaite avoir le nombre de commande de chaque client/mois
    Le résultat de cette requête multiplie le nombre de commande de janvier par celui de février.

  2. #2
    Membre Expert Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Par défaut
    Est-ce que cette solution serait possible ou tu veux absolument présenter par colonne ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT Cl.Nom, 
           Cl.IDClient, 
           Cl.Ville, 
           TO_CHAR(Co.DateCommande,'MM/YYYY'), 
           count(Co.IDCommande)
     
    FROM Client Cl
           LEFT OUTER JOIN Commande Co
           ON Co.Client = Cl.IDClient
     
    GROUP BY Cl.Nom, 
           Cl.IDClient, 
           Cl.Ville, 
           TO_CHAR(Co.DateCommande,'MM/YYYY')

  3. #3
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    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 136
    Par défaut
    Ce que tu essaies de faire se nomme un PIVOT et peut se traduire ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT  Client.Nom
        ,   Client.IDClient
        ,   Client.Ville,
        ,   SUM(CASE WHEN cmd.DateCommande BETWEEN '20120101' AND '20120131' THEN 1 ELSE 0 END) AS NbrJanvier
        ,   SUM(CASE WHEN cmd.DateCommande BETWEEN '20120201' AND '20120229' THEN 1 ELSE 0 END) AS NbrJanvier
    FROM
            Client
        LEFT JOIN
            Commande    cmd
            ON  cmd.Client = Client.IDClient
    GROUP BY Nom
        ,   IDClient
        ,   Ville
    ORDER BY Nom
    Le type DATE est pris en charge depuis longtemps par les SGBD, c'est dommage de ne pas en profiter...

    Par ailleurs, il n'y a rien de récursif dans ce que tu présentais...
    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.

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

Discussions similaires

  1. [SQL] problème de variable tableau PHP contenant les données d'une jointure SQL
    Par Schpountz42 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 09/02/2007, 05h59
  2. [MS Query] neophyte demande aide sur jointures SQL
    Par thorgal972 dans le forum Langage SQL
    Réponses: 19
    Dernier message: 27/11/2006, 17h13
  3. [SQL] PB : Jointure SQL ne fonctionne pas..
    Par guillaumeIOB dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 13/09/2006, 14h03
  4. Réponses: 1
    Dernier message: 28/07/2006, 03h57
  5. Réponses: 4
    Dernier message: 11/10/2005, 10h17

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