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

WinDev Discussion :

Sous requete sur base Hyperfile


Sujet :

WinDev

  1. #1
    Rédacteur/Modérateur

    Avatar de dsr57
    Homme Profil pro
    Analyste programmeur senior
    Inscrit en
    Octobre 2003
    Messages
    1 139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Analyste programmeur senior
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 139
    Points : 4 681
    Points
    4 681
    Billets dans le blog
    22
    Par défaut Sous requete sur base Hyperfile
    BOnjour à tous,

    J'ai un problème avec une requête SQL, je n'arrive pas a récupérer le colonne de la sous-requete dans mon SELECT principal.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT fac_id, fac_date, fac_dateecheance, fac_mtttc1+fac_mtttc2+fac_mtttc3+fac_mtttc4+fac_mtttc5, fac_mtttc1+fac_mtttc2+fac_mtttc3+fac_mtttc4+fac_mtttc5, far_montant   
    FROM  facture  
    WHERE fac_type=2  
    AND fac_client=31827 
    AND fac_dateecheance >='20130918' 
    AND fac_avoirnouveau=1  
    AND (fac_mtttc1+fac_mtttc2+fac_mtttc3+fac_mtttc4+fac_mtttc5) > (SELECT SUM (far_montant) as mtUtilise  FROM facturereglement WHERE far_modereglement='07' AND  far_avoir=facture.fac_id)

    Une partie du message d'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Erreur dans le code SQL de la requête <req>. Initialisation de la requête impossible.
    Rubrique mtUtilise inconnue dans le fichier . Vérifiez que la requête est en phase avec la description des fichiers.


    J'ai essaye en mettant un nom d'alias sur la sous requête sans résultat, mais il me retourne une erreur sur le mot cle AS ou le nom de l'alias

    Est ce que quelqu'un aurait une piste ?

    Merci par avance
    ------------------------------------------------------------------------------------------------------------------------------------------
    Mon message vous a aidé, pensez à remercier . La discussion est résolue, n'oubliez pas le tag
    ------------------------------------------------------------------------------------------------------------------------------------------
    Site perso : Formation, Expérience, Réalisations, ...
    Blog : Le Blog de DSR57 - Programmation WinDev

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 188
    Points : 12 744
    Points
    12 744
    Par défaut
    Bonjour,
    Vu que l'alias ne sert à rien dans la sous-requête, pourquoi ne pas essayer sans ?

    Tatayo.

  3. #3
    Rédacteur/Modérateur

    Avatar de dsr57
    Homme Profil pro
    Analyste programmeur senior
    Inscrit en
    Octobre 2003
    Messages
    1 139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Analyste programmeur senior
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 139
    Points : 4 681
    Points
    4 681
    Billets dans le blog
    22
    Par défaut
    Je me suis trompé en mettant la requête

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT fac_id, fac_date, fac_dateecheance, fac_mtttc1+fac_mtttc2+fac_mtttc3+fac_mtttc4+fac_mtttc5, fac_mtttc1+fac_mtttc2+fac_mtttc3+fac_mtttc4+fac_mtttc5, far_montant   
    FROM  facture  
    WHERE fac_type=2  
    AND fac_client=31827 
    AND fac_dateecheance >='20130918' 
    AND fac_avoirnouveau=1  
    AND (fac_mtttc1+fac_mtttc2+fac_mtttc3+fac_mtttc4+fac_mtttc5) > (SELECT SUM (far_montant)  FROM facturereglement WHERE far_modereglement='07' AND  far_avoir=facture.fac_id)
    j'ai essayé aussi celle là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT fac_id, fac_date, fac_dateecheance, fac_mtttc1+fac_mtttc2+fac_mtttc3+fac_mtttc4+fac_mtttc5, fac_mtttc1+fac_mtttc2+fac_mtttc3+fac_mtttc4+fac_mtttc5, mtUtilise  
    FROM  facture  
    WHERE fac_type=2  
    AND fac_client=31827 
    AND fac_dateecheance >='20130918' 
    AND fac_avoirnouveau=1  
    AND (fac_mtttc1+fac_mtttc2+fac_mtttc3+fac_mtttc4+fac_mtttc5) > (SELECT SUM (far_montant) as mtUtilise  FROM facturereglement WHERE far_modereglement='07' AND  far_avoir=facture.fac_id)
    Aucune des deux ne fonctionnent.
    ------------------------------------------------------------------------------------------------------------------------------------------
    Mon message vous a aidé, pensez à remercier . La discussion est résolue, n'oubliez pas le tag
    ------------------------------------------------------------------------------------------------------------------------------------------
    Site perso : Formation, Expérience, Réalisations, ...
    Blog : Le Blog de DSR57 - Programmation WinDev

  4. #4
    Rédacteur/Modérateur

    Avatar de dsr57
    Homme Profil pro
    Analyste programmeur senior
    Inscrit en
    Octobre 2003
    Messages
    1 139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Analyste programmeur senior
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 139
    Points : 4 681
    Points
    4 681
    Billets dans le blog
    22
    Par défaut
    Je ne poste pas pour vous apportez une solution a mon problème de requête

    Pour avancer, j'ai arrêté de vouloir remonter le résultat de la sous-requête dans le SELECT principal. Je viens de découvrir un autre problème, si la sous requête n'a pas d'enregistrement, donc normalement SUM(far_montant)= 0.
    Ma requête principale ne renvoie aucun résultat, en revanche avec au mois un résultat (dans la sous-requête) elle fonctionne correctement.

    Ma question que je me pose en ce moment, est ce que WinDev couplé à HF gère correctement les sous requêtes ??
    ------------------------------------------------------------------------------------------------------------------------------------------
    Mon message vous a aidé, pensez à remercier . La discussion est résolue, n'oubliez pas le tag
    ------------------------------------------------------------------------------------------------------------------------------------------
    Site perso : Formation, Expérience, Réalisations, ...
    Blog : Le Blog de DSR57 - Programmation WinDev

  5. #5
    Membre chevronné Avatar de laurent30s
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 881
    Points : 1 766
    Points
    1 766
    Par défaut
    Pas certain de comprendre ce que tu veux faire avec cette requête...
    et il y a beaucoup de bizarreries...

    Dans le 1er SELECT tu mais 2 fois...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fac_mtttc1+fac_mtttc2+fac_mtttc3+fac_mtttc4+fac_mtttc5,
    ... sans donner d'alias au calcul... même si ça marche c'est quand même mieux d'en mettre un...

    tu y mets également...

    ...apparemment cette rubrique ne correspond à aucun fichier ou sous requête dans le FROM... donc impossible à afficher...

    Dans la sous requête il y a un espace entre le SUM et la (, faut pas...

    A priori si tu enlève cet espace la sous requête devrait fonctionner.

    Après il faut que dans le FROM de la requête principale tu y ajoute le fichier facturereglement et les conditions de jointure qu'il a avec le fichier facture...
    Et là ta requête à peut-être une chance de marcher...

    Après je ne suis pas sur que la colonne far_montant corresponde à ce que tu veux puisque dans la 2ème avec mtUtilise tu sembles vouloir afficher la somme de far_montant.....

    Citation Envoyé par dsr57 Voir le message
    Je viens de découvrir un autre problème, si la sous requête n'a pas d'enregistrement, donc normalement SUM(far_montant)= 0.
    Ma requête principale ne renvoie aucun résultat, en revanche avec au mois un résultat (dans la sous-requête) elle fonctionne correctement.
    normal

    Citation Envoyé par dsr57 Voir le message
    Ma question que je me pose en ce moment, est ce que WinDev couplé à HF gère correctement les sous requêtes ??
    en principe oui... mais à priori tu ne les utilises pas correctement...

    Pour pouvoir plus t'aider il faudrait que tu donnes plus d'info sur ton analyse notamment s'il y a une liaison entre les fichiers facture et facturereglement...

    Il faudrait également que tu dises le résultat que tu veux obtenir avec cette requête parce que je t'avoues qu'en la regardant j'ai du mal à comprendre... donc difficile de t'aider...
    Bon dev
    Laurent

    - C’est génial.
    - Non c’est bizarre.
    - Justement quand c’est simple y’a des milliers de réponses et quand c’est bizarre y’en a aucune.

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 188
    Points : 12 744
    Points
    12 744
    Par défaut
    D'accord sur tout, sauf:
    Citation Envoyé par laurent30s Voir le message
    Après il faut que dans le FROM de la requête principale tu y ajoute le fichier facturereglement et les conditions de jointure qu'il a avec le fichier facture...
    Et là ta requête à peut-être une chance de marcher...
    Il s'agit d'une sous-requête corrélée, la condition de jointure se trouve dans la sous-requête:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ...
    AND (fac_mtttc1+fac_mtttc2+fac_mtttc3+fac_mtttc4+fac_mtttc5) > (SELECT SUM (far_montant) as mtUtilise  FROM facturereglement WHERE far_modereglement='07' AND  far_avoir=facture.fac_id)

    far_montant se trouve dans la sous-requête( c'est une colonne de facturereglement), il n'est donc pas accessible dans la requête principale.

    Pour le faire apparaître il faut supprimer la sous-requête, et passer par une jointure, du style (à vérifier quand même):
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT fac_id, fac_date, fac_dateecheance, fac_mtttc1+fac_mtttc2+fac_mtttc3+fac_mtttc4+fac_mtttc5, sum(far_montant)   
    FROM  facture  
    left outer join facturereglement on far_modereglement='07' AND  far_avoir=facture.fac_id
    WHERE fac_type=2  
    AND fac_client=31827 
    AND fac_dateecheance >='20130918' 
    AND fac_avoirnouveau=1  
    group by fac_id, fac_date, fac_dateecheance, fac_mtttc1, fac_mtttc2 ,fac_mtttc3 ,fac_mtttc4, fac_mtttc5
    having (fac_mtttc1+fac_mtttc2+fac_mtttc3+fac_mtttc4+fac_mtttc5) > SUM(far_montant)

    Tatayo.

  7. #7
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 278
    Points : 2 151
    Points
    2 151
    Par défaut
    +1 tatayo c'est exactement ce que j'allais proposer (dans l'esprit) !!!
    SQL : le véritable Esperanto

    "Les patates à ta tata épatent ton tonton mais les pates aux thons à ton tonton épatent pas ta tata." (Michel Souris)

    MERCI DE NE PAS M'ENVOYER DE MESSAGE PRIVE POUR DES QUESTIONS TECHNIQUES SANS MON ACCORD !

  8. #8
    Rédacteur/Modérateur

    Avatar de dsr57
    Homme Profil pro
    Analyste programmeur senior
    Inscrit en
    Octobre 2003
    Messages
    1 139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Analyste programmeur senior
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 139
    Points : 4 681
    Points
    4 681
    Billets dans le blog
    22
    Par défaut
    la répétition de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    fac_mtttc1+fac_mtttc2+fac_mtttc3+fac_mtttc4+fac_mtttc5,
    est du à mes nombreux test, j'ai oublié de l'enlever.

    Je veux parcourir mon fichier facture
    Récupérer les avoir : WHERE fac_type=2
    sur un client : fac_client=31827
    encore valide : fac_dateecheance >='20130918'

    Qui n'ont pas été utilisé totalement, d’où la sous-requete qui parcours un fichier des règlements, regroupe l'ensemble des utilisations SUM(far_montant)
    avec le test de comparaison : (fac_mtttc1+fac_mtttc2+fac_mtttc3+fac_mtttc4+fac_mtttc5) > (SELECT SUM (far_montant)

    pour avoir que ceux qui ont un montant encore utilisable.
    ------------------------------------------------------------------------------------------------------------------------------------------
    Mon message vous a aidé, pensez à remercier . La discussion est résolue, n'oubliez pas le tag
    ------------------------------------------------------------------------------------------------------------------------------------------
    Site perso : Formation, Expérience, Réalisations, ...
    Blog : Le Blog de DSR57 - Programmation WinDev

  9. #9
    Membre chevronné Avatar de laurent30s
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 881
    Points : 1 766
    Points
    1 766
    Par défaut
    Citation Envoyé par dsr57 Voir le message
    la répétition de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    fac_mtttc1+fac_mtttc2+fac_mtttc3+fac_mtttc4+fac_mtttc5,
    est du à mes nombreux test, j'ai oublié de l'enlever.

    Je veux parcourir mon fichier facture
    Récupérer les avoir : WHERE fac_type=2
    sur un client : fac_client=31827
    encore valide : fac_dateecheance >='20130918'

    Qui n'ont pas été utilisé totalement, d’où la sous-requete qui parcours un fichier des règlements, regroupe l'ensemble des utilisations SUM(far_montant)
    avec le test de comparaison : (fac_mtttc1+fac_mtttc2+fac_mtttc3+fac_mtttc4+fac_mtttc5) > (SELECT SUM (far_montant)

    pour avoir que ceux qui ont un montant encore utilisable.
    donc la proposition de Tatayo doit pas être bien loin de correspondre à ton besoin...
    Bon dev
    Laurent

    - C’est génial.
    - Non c’est bizarre.
    - Justement quand c’est simple y’a des milliers de réponses et quand c’est bizarre y’en a aucune.

  10. #10
    Rédacteur/Modérateur

    Avatar de dsr57
    Homme Profil pro
    Analyste programmeur senior
    Inscrit en
    Octobre 2003
    Messages
    1 139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Analyste programmeur senior
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 139
    Points : 4 681
    Points
    4 681
    Billets dans le blog
    22
    Par défaut
    en cours de test, les réponses se sont croisées
    ------------------------------------------------------------------------------------------------------------------------------------------
    Mon message vous a aidé, pensez à remercier . La discussion est résolue, n'oubliez pas le tag
    ------------------------------------------------------------------------------------------------------------------------------------------
    Site perso : Formation, Expérience, Réalisations, ...
    Blog : Le Blog de DSR57 - Programmation WinDev

  11. #11
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 278
    Points : 2 151
    Points
    2 151
    Par défaut
    Un bon gros left JOIN(t) le matin, y a que ça de vrai
    SQL : le véritable Esperanto

    "Les patates à ta tata épatent ton tonton mais les pates aux thons à ton tonton épatent pas ta tata." (Michel Souris)

    MERCI DE NE PAS M'ENVOYER DE MESSAGE PRIVE POUR DES QUESTIONS TECHNIQUES SANS MON ACCORD !

Discussions similaires

  1. Exporter requete et sous requete sur excel
    Par Renardo dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 28/01/2007, 11h41
  2. requete sur bases distantes
    Par blures1 dans le forum Requêtes
    Réponses: 5
    Dernier message: 05/07/2006, 18h43
  3. Réponses: 1
    Dernier message: 04/04/2006, 11h28
  4. Réponses: 2
    Dernier message: 10/11/2005, 17h59
  5. Réponses: 3
    Dernier message: 17/05/2004, 18h28

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