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

Paradox Discussion :

PB avec une requête


Sujet :

Paradox

  1. #1
    Membre éclairé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Points : 681
    Points
    681
    Par défaut PB avec une requête
    Bonsoir,

    Je galère avec une petite requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT Compose.code_article,
    max(Article.Stock_actuel / Compose.Quantite) as  QTE
    FROM  Article    INNER  JOIN  Compose
       ON  ( Article.code_article=Compose.code_element)  
    GROUP BY Compose.code_article
    Celle-ci me renvoie les lignes correctement mais si je rajoute un champ du côté gauche (Article) ce n'est pas bon. J'ai bien essayé en vain avec LEFT/RIGHT. C'est une BD paradox donc trés limitée en SQL.

    Merci pour votre aide .
    Si quelqu'un t'a offensé, ne cherche pas à te venger; assieds-toi au bord de la rivière et, bientôt, tu verras passer son cadavre.

    Lao Tseu - un sage chinois

    Celui qui lutte contre les monstres doit veiller à ne pas le devenir lui-même.
    Et quand ton regard pénètre longtemps au fond d'un abîme, l'abîme, lui aussi, pénètre en toi.

    Friedrich Nietzsche - Par délà le bien et le mal

  2. #2
    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 789
    Points
    30 789
    Par défaut
    Pour pouvoir t'aider, il faudrait que tu décrives un peu plus concrètement en quoi "ce n'est pas bon".
    Un message d'erreur ? Un résultat différent de celui que tu attends ?
    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.

  3. #3
    Membre éclairé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Points : 681
    Points
    681
    Par défaut
    Excusez moi de ne pas avoir été plus précis.
    Avec cette requête le résultat est correct , et, comme je l'ai dis, si je
    rajoute un champ du côté gauche (Article) pour récuperer une information supplémentaire j'obtiens toute les lignes de la table de droite (compose) donc résultat différent. Ce que je souhaiterais, c'est de conserver le résultat de la requête.

    Et désolé de ne pas avoir poster dans le bon forum

    Merci.
    Si quelqu'un t'a offensé, ne cherche pas à te venger; assieds-toi au bord de la rivière et, bientôt, tu verras passer son cadavre.

    Lao Tseu - un sage chinois

    Celui qui lutte contre les monstres doit veiller à ne pas le devenir lui-même.
    Et quand ton regard pénètre longtemps au fond d'un abîme, l'abîme, lui aussi, pénètre en toi.

    Friedrich Nietzsche - Par délà le bien et le mal

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut
    Il faudrait savoir exactement ce que tu désires , et pour cela la description des tables serait un atout .
    le champ à gauche , c'est pas très clair
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  5. #5
    Membre éclairé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Points : 681
    Points
    681
    Par défaut
    Bonjour,

    Alors les tables les voici :

    Table Article :
    --------

    code_article
    nom_article
    stock_actuel
    pu_vente
    .............
    .............


    Table Compose :
    ----------

    code_element (c'est le code article de la table article)
    code_article
    quantite

    Et encore pour être plus clair , voici les lignes de la table COMPOSE d'oû je n'aimerais extraire que les lignes du code_article et pas en doublon et de diviser le stock_actuel de la ligne ARTICLE par la quantite de la ligne COMPOSE:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    ID      CODE_ARTICLE  CODE_ELEMENT  QUANTITE
    --      --------------  --------------   ---------- 
     
    1	0007	             0009	         1
    2	0007              	0010               1
    3	0007	             0011	         1
    4	0017	             0009 	         1
    5	0017	             0016	         1

    Avec la requête que j'ai poster ca donne ce résultat qui est correct :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    CODE_ARTICLE    QTE
    --------------    ----
       0007	             3
       0017	             5
    Mais lorsque je rajoute dans la requête le nom_article de la table ARTICLE ca me donne toutes les lignes qu'il y a dans la table COMPOSE ce n'est pas le résultat attendu:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    code_art  nom_art                           QTE
    --------  -------                            -----
    0007	  Disque dur 40 Go	               17
    0007	  Imprimante Laser lexmark      7	 
    0007	  Lecteur CD/DVD	                3
    0017	  Imprimante Laser lexmark      7	
    0017	  TwinMOS Mobile Disk III        5
    Merci
    Si quelqu'un t'a offensé, ne cherche pas à te venger; assieds-toi au bord de la rivière et, bientôt, tu verras passer son cadavre.

    Lao Tseu - un sage chinois

    Celui qui lutte contre les monstres doit veiller à ne pas le devenir lui-même.
    Et quand ton regard pénètre longtemps au fond d'un abîme, l'abîme, lui aussi, pénètre en toi.

    Friedrich Nietzsche - Par délà le bien et le mal

  6. #6
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Argentine

    Informations forums :
    Inscription : Mars 2006
    Messages : 85
    Points : 95
    Points
    95
    Par défaut
    Bonjour Freud,

    Je pense que lorsque tu ajoutes un champ de la table article tu oublies de le mentionner dans la ligne GROUP_BY.

    Il y a une règle sql: "When GROUP_BY exists, every simple field in projectors must be in GROUP_BY".

    Essaie cette syntaxe:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT Compose.code_article, Article.stock_actuel,
    max(Article.Stock_actuel / Compose.Quantite) AS  QTE
    FROM  Article    INNER  JOIN  Compose
    	ON  ( Article.code_article=Compose.code_element)  
    GROUP BY Compose.code_article,article.stock_actuel
    Bonne journée.

  7. #7
    Membre éclairé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Points : 681
    Points
    681
    Par défaut
    marche pas je l'ai déjà essayer...
    Merci quand même .
    Si quelqu'un t'a offensé, ne cherche pas à te venger; assieds-toi au bord de la rivière et, bientôt, tu verras passer son cadavre.

    Lao Tseu - un sage chinois

    Celui qui lutte contre les monstres doit veiller à ne pas le devenir lui-même.
    Et quand ton regard pénètre longtemps au fond d'un abîme, l'abîme, lui aussi, pénètre en toi.

    Friedrich Nietzsche - Par délà le bien et le mal

  8. #8
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Argentine

    Informations forums :
    Inscription : Mars 2006
    Messages : 85
    Points : 95
    Points
    95
    Par défaut
    Salut Freud,

    Donne s.t.p. les enregistrements concernés par ton query pour la table ARTICLE, comme tu l'as fait por la table COMPOSE dans ton 1er tableau.

    Donne aussi la syntaxe du sql qui ne marche pas. J'essaierai de le reproduire et le résoudre.

    A bientôt.

  9. #9
    Membre éclairé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Points : 681
    Points
    681
    Par défaut
    Salut



    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
     
    ID        CODE_ART   NOM_ART                   STOCK_ACTUEL      COMPOSE
    --         --------      -------                        ------------          -------    
     
    1	0001	NOKIA MOBILE            	 0		False
    2	0002	Pompe à huile	 	 0		False
    3	0003	Plaquettes 		 10009		False
    4	0004	Pompe à vide		  0		False
    5	0005	Chemise piston		  12		False
    6	0006	Chambre à air 		  52		False
    7	0007	Micro Ordi		  5		True
    8	0008	Canon PIXMA		  6		False
    9	0009	Imprimante 		  6		False
    10	0010	Disque dur 		 16		False
    11	0011	Lecteur CD/DVD	 	 2		False
    12	0012	Micro processeur 	              5		False
    13	0013	Clavier          	              4		False
    14	0014	GRAVEUR CD-DVD	 	 3		False
    15	0015	Imprimante Laser 	             7		False
    16	0016	TwinMOS Mobile   	             5		False
    17	0017	Ordinateur portable    	 3		True
    18	0018	Carte mère		99		False
    19	0019	Appareil photo 		19		False
    Voici les enregistrements de la table ARTICLE ce n'est pas toute la table parce qu'elle est volumineuse en champs je ne post que le nécéssaire avec un champ boolean en plus qui determine si l'article se trouve dans la table COMPOSE et désolé j'aurais dû mentionner ce champ au début du post mais je n'ai pas juger utile parce que j'ai en vain essayer avec ce champ en faisant un WHERE Article.compose=true.

    Je reprend depuis le début. J'ai deux articles le 0007 et le 0017 dont chaqu'un possede un ou plusieurs element qui le compose situé dans la table COMPOSE.

    Si par exemple le 0007 possede 3 elements je dois recupere le stock_actuel de ces element (qui sont aussi des articles ) depuis la table ARTICLE et le diviser par la quantite de ces elements dont la quantite est recupere depuis COMPOSE

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ARTICLE.STOCK_ACTUEL/COMPOSE.QUANTITE
    Donc il y'aura des lignes de résultat et là je dois recuperer soit le Minimum soit le Maximum de ces lignes en faisant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MAX(ARTICLE.STOCK_ACTUEL/COMPOSE.QUANTITE)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT Compose.code_article,
    max(Article.Stock_actuel / Compose.Quantite) AS  QTE
    FROM  Article    INNER  JOIN  Compose
       ON  ( Article.code_article=Compose.code_element)  
    GROUP BY Compose.code_article
    Avec ce resultat qui est correct (les infos ont changer depuis le premier post parce je viens de travail sur la BDD) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    CODE     QTE
    -----     ----
    0007	16
    0017	6
    Donc en essayant de recuperer le nom_article ou autre depuis la table ARTICLE c'est que le resultat est incorrect qui renvois toutes les enregistrements de COMPOSE.

    C'est peut-être tordu mais si y a pas de solution j'opterais pour un ALTER ADD/DROP c'est juste un calcul à faire temporairement.

    Merci.
    Si quelqu'un t'a offensé, ne cherche pas à te venger; assieds-toi au bord de la rivière et, bientôt, tu verras passer son cadavre.

    Lao Tseu - un sage chinois

    Celui qui lutte contre les monstres doit veiller à ne pas le devenir lui-même.
    Et quand ton regard pénètre longtemps au fond d'un abîme, l'abîme, lui aussi, pénètre en toi.

    Friedrich Nietzsche - Par délà le bien et le mal

  10. #10
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Argentine

    Informations forums :
    Inscription : Mars 2006
    Messages : 85
    Points : 95
    Points
    95
    Par défaut
    Salut Freud,

    je viens de tester avec tes données et ma syntaxe regarde les différences:

    1. ajout nom_art dans la liste SELECT
    2. ajout nom_art dans la clause GROUP_BY
    3. chengement clause ON ( Article.code_article=Compose.code_article)

    Dans mon Paradox ca marche normalement.

    J'ajoute les 4 contenus: les 2 tables avec tes données + mon sql et le résultat.

    TABLE COMPOSE SIMPLIFIEE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ID	CODE_ARTICLE	QUANTITE	CODE_ELEMENT
     
    1	7	1	9
    2	7	1	10
    3	7	1	11
    4	17	1	9
    5	17	1	16

    TABLE ARTICLE SIMPLIFIEE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ID	CODE_ARTICLE	STOCK_ACTUEL	NOM_ART
     
    7	7	5	MICRO ORDI
    17	17	3	ORDINATEUR PORTABLE
    SQL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    /*
    Alias: WORK
    LiveAnswer: FALSE
    */
     
    SELECT Compose.code_article,Article.nom_art,
    max(Article.Stock_actuel / Compose.Quantite) AS  QTE
    FROM  Article    INNER  JOIN  Compose
       ON  ( Article.code_article=Compose.code_article)  //regarde cette clause dans ta version
    GROUP BY Compose.code_article,Article.nom_art
    RESULTAT DE PARADOX
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    CODE_ARTICLE	NOM_ARTICLE	QTE
     
    7	MICRO ORDI		5
    17	ORDINATEUR PORTABLE	3
    Dis nous si ceci résoud le problème.
    Bonne chance !

  11. #11
    Membre éclairé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Points : 681
    Points
    681
    Par défaut
    Salut FDR2006,

    c'est vrai que ca donne les lignes escomptés mais malheureusement pas les bonnes quantités je suis tombé sur cette variante d'ailleurs si tu change le MIN par le MAX tu devrais avoir les bonnes lignes mais toujours pas les quantités. En fait, ces elements dans la table COMPOSE ce sont eux mêmes des articles qui figurent dans la table ARTICLE et qui compose un article lors d'un assemblage le champ quantité dans COMPOSE c'est la quantité nécéssaire pour assemblé un article composer.
    Par exemple, pour assembler un article je dois rechercher la quantité minimale
    du stock physique parmi les elements qui le composent pour que je puisse assembler.

    Je reprend cette table COMPOSE :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    ID      CODE_ARTICLE  CODE_ELEMENT        QUANTITE
    --      --------------  --------------   ---------- 
     
    1	0007	             0009	         2
    2	0007                   0010                1
    3	0007	             0011	         1
    4	0017	             0009 	         1
    5	0017	             0016	         1
    je voudrais savoir combien je peux assembler pour l'article 0007 qui est
    composé de 3 eléments qui se trouve dans la table ARTICLE comme
    suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
         CODE_ARTICLE     STOCK_PHYSIQUE
        --------------  --------------   
    	0009	              6	        
    	0010                   11                
    	0011	              4
    Je ne pourrais assembler que 3=6/2 (element 0009) unités pour 0007 bien que
    j'ai du stock superieurs chez d'autres éléments.
    Parce que, pour assembler plus de 3 ou 10 il en faudrait plus de 3 chez l'element 0009.

    Merci beaucoup de t'être penché sur mon problème mais faut pas trop s'archarné dessus, je vais opter pour une autre solution.
    Si quelqu'un t'a offensé, ne cherche pas à te venger; assieds-toi au bord de la rivière et, bientôt, tu verras passer son cadavre.

    Lao Tseu - un sage chinois

    Celui qui lutte contre les monstres doit veiller à ne pas le devenir lui-même.
    Et quand ton regard pénètre longtemps au fond d'un abîme, l'abîme, lui aussi, pénètre en toi.

    Friedrich Nietzsche - Par délà le bien et le mal

  12. #12
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Argentine

    Informations forums :
    Inscription : Mars 2006
    Messages : 85
    Points : 95
    Points
    95
    Par défaut
    Salut,

    Dernières infos:

    1. Si tu as un query sql qui te donne les Q correctes et qui contient le Code_Art de la table Articles il est très facile de passer un deuxième query qui ajoute les intitulés avec un simple join. Ceci seulement dans le but d'eviter la recherche du query unique qui le fasse. Parfois il est plus utile, bien que mois élegant, de passer deux queries quand la perfo n'est pas un facteur limitatif, que passer une demie journée de travail à trouver "le" query. Souviens toi que les tables temporaires qui commencent par __tblName.db et sont écrites dans l'alias PRIV sont éffacées automatiquement par Paradox à la sortie. Très utile pour ne pas accumuler des temporaires.

    2. Query est le coeur de Paradox: un structure très rapide aussi bien à la programmation qu'à la performance. Donc on doit programmer par query tant que possible, avant de choisir des autrres structures (scan, for, while, avec Tcursors etc).

    Bonne chance!

  13. #13
    Membre éclairé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Points : 681
    Points
    681
    Par défaut
    Salut FDR2006,

    Effectivement, pourquoi chercher toujours la perf. pour regler un petit problème .....??? C'est tellement devenue une idée fixe de chercher à bien faire que l'on perd enormement de temps en passant à côté de l'essentiel.

    Ok pour une deuxieme query elle fera l'affaire.

    Merci pour les infos FDR2006.
    Si quelqu'un t'a offensé, ne cherche pas à te venger; assieds-toi au bord de la rivière et, bientôt, tu verras passer son cadavre.

    Lao Tseu - un sage chinois

    Celui qui lutte contre les monstres doit veiller à ne pas le devenir lui-même.
    Et quand ton regard pénètre longtemps au fond d'un abîme, l'abîme, lui aussi, pénètre en toi.

    Friedrich Nietzsche - Par délà le bien et le mal

  14. #14
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Argentine

    Informations forums :
    Inscription : Mars 2006
    Messages : 85
    Points : 95
    Points
    95
    Par défaut
    Salut,

    et tout à fait d'accord.

    Un plaisir de te rencontrer, et à bientôt!

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 28/12/2004, 16h15
  2. [Recordset] Incompatibilté de type avec une requête
    Par lbourlet dans le forum Access
    Réponses: 2
    Dernier message: 29/10/2004, 15h52
  3. PB avec une requête Count
    Par Marion dans le forum ASP
    Réponses: 7
    Dernier message: 05/07/2004, 12h56
  4. Pb avec une requête
    Par arsgunner dans le forum ASP
    Réponses: 4
    Dernier message: 14/06/2004, 08h40
  5. problème avec une requête imbriquée
    Par jaimepasteevy dans le forum Langage SQL
    Réponses: 13
    Dernier message: 05/12/2003, 10h29

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