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 :

[Debutant] Probleme de requete


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 62
    Par défaut [Debutant] Probleme de requete
    Bonjour,

    J'ai besoin d'aide pour une requete que j'trouve assez complexe
    Voilà tout d'abord a quoi je veux arriver:

    PARTENAIRES -- VISITES -- CLIENTS -- CAHT total
    Part1 --------------- 56 --------- 23 ------- 1596,00
    Part2 --------------- 231 -------- 78 ------- 3256,00
    Part3 --------------- 126 -------- 112 ------ 3349,00

    desolé pour la mise en forme...
    Un tableau, qui affichera les noms des différents partenaires, ainsi que les visites et client apportés avec le chiffre d'affaire total du mois des clients de ce meme partenaire, j'espère avoir été clair...

    J'pensais y arriver jusqu'à ce que je me rende compte d'un problême...
    Voilà ma requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT nom, visites, TEMP1.clients_avec_achat, TEMP2.CAHT_total
    FROM Partenaires, 
    		(SELECT COUNT(DISTINCT Commande.client) AS clients_avec_achat
    		FROM Commande INNER JOIN Client ON Commande.Client = Client.id
    		WHERE (Client.partenaire = 'Part1')) TEMP1,
     
    		(SELECT SUM(Commande.prixproduitsHT) AS CAHT_total
    		FROM Client INNER JOIN Commande ON Client.id = Commande.client
    		WHERE (Commande.date BETWEEN '01/01/2006 00:00' AND '31/01/06 23:59') AND (Client.partenaire = 'Part1')) TEMP2
    On peut voir que je teste la requete avec le nom du partenaire en dur, donc j'aurai dans mes colonnes le même nombre de clients ou encore le même chiffre d'affaire pour tout les partenaires, et en fait vu la requete effectuée c'est normal.
    Je pensais qu'en récupérant le nom du partenaire à chaque ligne cela aurait pu marcher seulement je n'y arrive pas ... (je fais ça en asp.net/c#).

    Je voulais donc demander, si vous aviez une idée, de comment modifier ma requete pour arriver a ce que je souhaite ...

    j'vous remerci d'avance.

  2. #2
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Par défaut
    Je ne suis pas certain de comprendre les liens entre tes différentes tables, peux-tu donner les CREATE de tes tables Partenaires, Client et Commande(la partie utile en tout cas).
    Est-ce normal qu'il y ait une condition de date dans une de tes sous-requêtes et pas dans l'autre ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 62
    Par défaut
    Desolé, c'est vrai que c'est pas assez clair.

    En fait j'ai une page aspx.cs dans laquelle j'veux afficher le tableau que j'ai mis plus haut. Pour faire ça j'ai voulu, créer une requete qui se trouve dans une procédure stockée en fait, qui va me récuperer tout les champs dont j'ai besoin hors il le fait mais à chaque fois pour le même partenaire...

    Pour la condition de date, c'est normal, je fais pour l'instant des esssais pour le mois de Janvier, mais j'vais rencontrer le même probleme que pour le nom du partenaire...

    Sinon je travaille sur 3 tables (Client, Commande, Partenaire)
    l'ID du client correspond à au champ Client dans la table Commande
    le champ Partenaire dans la table Client correspond au champ Nom dans la table Partenaire.

    en esperant que ça éclaircisse le probleme...

  4. #4
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT nom, visites, t1.clients_avec_achat, t2.CAHT_total 
    FROM Partenaires p INNER JOIN  
          (SELECT Partenaire, COUNT(DISTINCT client) AS clients_avec_achat 
           FROM Commande a INNER JOIN Client b ON a.Client = b.Id) t1 ON t1.Partenaire = p.Nom
         INNER JOIN
          (SELECT Partenaire, SUM(prixproduitsHT)  AS CAHT_total 
           FROM Commande a INNER JOIN Client b ON a.Client = b.Id
           WHERE date BETWEEN '01/01/2006 00:00' AND '31/01/06 23:59') t2 ON t2.Partenaire = p.Nom
    En fonction des liens entre Partenaire et Client , les calculs peuvent être faux. Si la condition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    date BETWEEN '01/01/2006 00:00' AND '31/01/06 23:59'
    est aussi valide pour calculer le nombre de clients, il y a plus simple.
    Si ton moteur supporte la syntaxe CASE WHEN, il y a plus simple.

    Baptiser un champ "date" qui est est un mot clé est maladroit voire dangereux.
    Faire un lien entre table sur un nom est maladroit.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 62
    Par défaut
    malheuresement j'peux pas faire grand chose, la base de donnée m'est imposé...

    Et j'arrive pas à faire marcher ta requete... on est bien d'accord que le nom du partenaire devra être mis là :

    "t1 ON t1.Partenaire = p.Nom"

    ??

  6. #6
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Par défaut
    Et j'arrive pas à faire marcher ta requete
    Quel est le message d'erreur ?
    Quel est ton SGBD sa version ?

    "t1 ON t1.Partenaire = p.Nom"
    Oui, c'est bien ce que j'ai écrit.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 62
    Par défaut
    En fait j'ai retravaillé dessus, et j'y suis arrivé voilà ce que j'ai fais (sans la condition de date):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    	SELECT Partenaires.nom, Partenaires.visites, TEMP1.clients_avec_achat, TEMP2.CAHT_total
    	FROM Partenaires LEFT OUTER JOIN
    		(SELECT Partenaires.nom, COUNT(DISTINCT Commande.client) AS clients_avec_achat
    		FROM Partenaires, Commande INNER JOIN Client ON Commande.Client = Client.id
    		WHERE (Client.partenaire = Partenaires.nom)
    		GROUP BY Partenaires.nom)TEMP1 ON TEMP1.nom = Partenaires.nom 
    	LEFT OUTER JOIN
    		(SELECT Partenaires.nom, SUM(Commande.prixproduitsHT) AS CAHT_total
    		FROM Partenaires, Commande INNER JOIN Client ON Commande.Client = Client.id
    		WHERE (Client.partenaire = Partenaires.nom)
    		GROUP BY Partenaires.nom)TEMP2 ON TEMP2.nom = Partenaires.nom
    	ORDER BY Partenaires.nom

    Donc pour ça, j'te remerci

    Maintenant pour ma condition de date, j'ai un souci:
    Depuis ma page aspx j'vais récupérer 3 valeurs selon le mois et l'année entrés par l'utilisateur:
    un entier 'date_jour' (qui contiendra le dernier jour du mois choisi), un entier 'date_mois' et un entier 'date_annee'
    Voilà ce que j'ai fais (je garde que la sous-requête pour simplifer, mais les variables sont bien declarées):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	(SELECT Partenaires.nom, SUM(Commande.prixproduitsHT) AS CAHT_total
    		FROM Partenaires, Commande INNER JOIN Client ON Commande.Client = Client.id
    		WHERE (Client.partenaire = Partenaires.nom)
    			AND (Commande.date BETWEEN '01'+@date_mois+'/'+@date_annee+'00:00' AND @date_jour+'/'+@date_mois+'/'+@date_annee+'23:59' )
    		GROUP BY Partenaires.nom)TEMP2 ON TEMP2.nom = Partenaires.nom
    Et ça ne marche pas du tout, j'imagine que c'est la syntaxe, et j'voulais donc savoir si cette ligne:
    '01'+@date_mois+'/'+@date_annee+'00:00' AND @date_jour+'/'+@date_mois+'/'+@date_annee+'23:59'
    était valide ??

    Je travaille avec SQL-Server.


    EDIT: Bon oubliez ma question j'ai trouvé plus pratique, tout faire à partir de la page aspx, et mettre toute la date dans une seule variable.

    En tout cas encore merci pour votre aide

Discussions similaires

  1. [Debutant] Probleme avec requete UPDATE
    Par xavDIP dans le forum VB.NET
    Réponses: 2
    Dernier message: 20/06/2007, 11h46
  2. [DEBUTANT] petit probleme de requete sql
    Par eclipse012 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 12/12/2006, 15h10
  3. [debutant] Probleme requete mise à jour
    Par titocv723 dans le forum Access
    Réponses: 2
    Dernier message: 10/10/2006, 11h05
  4. [debutant]Probleme de requete avec date
    Par shub dans le forum Access
    Réponses: 9
    Dernier message: 12/05/2006, 10h01
  5. [Access] debutant sql, probleme de requete
    Par claude delattre dans le forum Langage SQL
    Réponses: 4
    Dernier message: 08/02/2006, 13h02

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