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

HyperFileSQL Discussion :

HFSQL / Double imbrication


Sujet :

HyperFileSQL

  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juillet 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Juillet 2006
    Messages : 133
    Points : 90
    Points
    90
    Par défaut HFSQL / Double imbrication
    Bonjour,

    Je travaille sur HFSQL/Windev, je me permet donc de poser ma question ici, car je ne sais pas où la poser.

    J'ai un soucis avec une requete qui fonctionne sur un interrogateur SQL mais par sur Etats et Requetes.

    Il semblerait que le problème provienne de la double imbrication :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT M1.COBC, M1.DELAIS
    FROM 
    (
    	SELECT M2.COBC, STRING_AGG(WL.DateVersChaîne(M2.DELAI),' + ') AS DELAIS
    	FROM (
    		SELECT DISTINCT D2.DELAI, D2.COBC, B2.DATEBC
    		FROM DETAILBC D2 INNER JOIN BC B2 ON D2.COBC = B2.COBC
    		WHERE B2.DATEBC = '20160829'
    	) AS M2
    	GROUP BY M2.COBC
    ) M1 
    GROUP BY M1.COBC, M1.DELAIS

    L'objectif est relativement simple :
    Pour chaque enregistrement de BC ayant une BC.DATEBC = '20160829'
    Concatener tous les DETAILBC.DELAI unique.

    Peut-être auriez vous une idée de comment supprimer cette double imbrication ?

    Merci,

    Gabvoir

  2. #2
    Membre régulier
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juillet 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Juillet 2006
    Messages : 133
    Points : 90
    Points
    90
    Par défaut
    Bonjour,

    Vous auriez pu me dire que le premier niveau de select n'était pas utile mais si car y'avait une jointure dessus que j'ai enlevé.

    Il semblerait que le problème ne provienne pas de la double imbrication.
    J'ai réussi à enlever une imbrication en inversant tout :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT M1.COBC, M1.EMT, EMPLOYE.NOMEMP, M1.DATEBC, M1.COFOU, FOURNISS.NOM, M1.OBS, ECHEANCFOUR.ECHEANCE,STRING_AGG(WL.DateVersChaîne(M1.DELAI),' + ')
    FROM 
    (
    	SELECT D2.DELAI, D2.COBC, B2.DATEBC, B2.COBC,B2.EMT,B2.COFOU,B2.OBS
    	FROM DETAILBC D2 INNER JOIN BC B2 ON D2.COBC = B2.COBC
    	WHERE B2.DATEBC = '20160825'
    	GROUP BY D2.DELAI, D2.COBC, B2.DATEBC, B2.COBC,B2.EMT,B2.COFOU,B2.OBS
    ) M1
    LEFT JOIN ECHEANCFOUR ON M1.COBC = ECHEANCFOUR.COBC
    LEFT JOIN EMPLOYE ON M1.EMT = EMPLOYE.CODEEMP
    LEFT JOIN FOURNISS ON M1.COFOU = FOURNISS.COFOU
     
    GROUP BY M1.COBC, M1.EMT, EMPLOYE.NOMEMP, M1.DATEBC, M1.COFOU, FOURNISS.NOM, M1.OBS, ECHEANCFOUR.ECHEANCE

    Même problème ...

    Merci pour votre aide !

  3. #3
    Membre régulier
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juillet 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Juillet 2006
    Messages : 133
    Points : 90
    Points
    90
    Par défaut
    Bonjour,

    Pour répondre à ma propre question, la requête ci-dessus fonctionne correctement si elle est exécuté à partir d'un état.
    Si je l’exécute à partir de l’exécuteur de requête de mon appli, cette dernière retourne une erreur, d'où mon problème précédent, qui en fait doit provenir de l'appli et non de la requête.

    Pour conclure je l'ai optimisé en ne prenant que les champs utile, et en rajoutant mon paramètre :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT M1.COBC, M1.DATEBC, M1.COFOU, M1.OBS, STRING_AGG(WL.DateVersChaîne(M1.DELAI),' + ') AS DELAIS, EMPLOYE.NOMEMP, FOURNISS.NOM, ECHEANCFOUR.ECHEANCE
    FROM 
    (
    	SELECT B2.COBC, B2.EMT,B2.COFOU,B2.OBS, D2.DELAI, B2.DATEBC
    	FROM DETAILBC D2 INNER JOIN BC B2 ON D2.COBC = B2.COBC
    	WHERE B2.DATEBC = {JourJ}
    	GROUP BY B2.COBC, B2.EMT,B2.COFOU,B2.OBS, D2.DELAI, B2.DATEBC
    ) M1
    LEFT JOIN FOURNISS ON TRIM(M1.COFOU) = FOURNISS.COFOU
    LEFT JOIN ECHEANCFOUR ON M1.COBC = ECHEANCFOUR.COBC
    LEFT JOIN EMPLOYE ON TRIM(M1.EMT) = EMPLOYE.CODEEMP
    GROUP BY M1.COBC, M1.EMT, M1.DATEBC, M1.COFOU, M1.OBS, FOURNISS.NOM, ECHEANCFOUR.ECHEANCE, EMPLOYE.NOMEMP

    Merci pour votre aide indirect

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

Discussions similaires

  1. [2.x] double imbrication de formulaire
    Par jejeman dans le forum Symfony
    Réponses: 2
    Dernier message: 26/03/2014, 10h17
  2. division de "double" par "0"
    Par ickis dans le forum C
    Réponses: 14
    Dernier message: 31/08/2003, 19h09
  3. abs pour un long double
    Par barthelv dans le forum C
    Réponses: 2
    Dernier message: 23/07/2003, 16h16
  4. String -> long double (_strlold ?)
    Par haypo dans le forum C
    Réponses: 7
    Dernier message: 25/07/2002, 20h22
  5. Réponses: 3
    Dernier message: 12/06/2002, 21h15

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