Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

=?ISO-8859-1?Q?Comment_filtrer_une_requ=EAte_Group_By_??=

6 réponses
Avatar
Loko
Bonjour

Voici ma requ=EAte :
---------------------------
Select
ligbe.be_id as be_id,
reflarth.ART_CODE_LARTH as art_code_larth,
reflarth.mpf_code_orig as mpf_code_orig,
reflarth.mpf_ind_orig as mpf_ind_orig,
reflarth.art_code as art_code,
article.art_lib as art_lib,
sum(ligbe.ligbe_qte) as qte
From
LIGBE, LIGCDE, REFLARTH, ARTICLE
Where
ligcde.ECD_NUM=3Dligbe.ECD_NUM
And ligcde.LCD_LIGNE=3Dligbe.LCD_LIGNE
And reflarth.ART_CODE=3Dligcde.ART_CODE
And article.ART_CODE=3Dligcde.ART_CODE
Group by ligbe.be_id, reflarth.ART_CODE_LARTH, reflarth.mpf_code_orig,
reflarth.mpf_ind_orig, reflarth.art_code, article.art_lib
------------------------------

Je l'affiche dans une table avec parcours automatique, rubrique de
parcours automatique (j'ai =E9galement essay=E9 avec rubrique de parcours
=3D art_code par exemple).

Au lancement de la fenetre, sans aucun code, je vois bien mes lignes
avec totaux.

Je souhaite maintenant filtrer ma table sur une valeur de be_id (ici
"1" en dur pour l'exemple). Je fais donc cela :

-----------------------------
Clefparcours est une cha=EEne
Clefparcours=3D HFiltreIdentique(REQ_LIGBE_Condense_par_Article, BE_ID,
1)
TableAffiche(TABLE_REQ_LIGBE_Condens=E9_par_Article)
------------------------------

et j'obtiens alors l'erreur syst=E8me: ORA-00979: not a GROUP BY
expression.

J'ai =E9galement essay=E9 avec
---------------------------------
TABLE..RubriqueParcourue=3Dbe_id
TABLE..Filtre=3D1
TableAffiche(TABLE)
----------------------------------

sans plus de succ=E8s.

Comment faut il faire ?
Merci

6 réponses

Avatar
Loko
Autre exemple un peu différent : j'ai une requete définie dans le
projet avec un group by :
-----------------
SELECT LIGCDE.ECD_NUM, LIGCDE.LCD_LIGNE, LIGCDE.LCD_ETAT,
LIGCDE.LCD_QTE, ENTCDE.ECD_ETAT, SUM(QLVCDE.QLC_QTELIV) as qte_livree
FROM LIGCDE, QLVCDE, ENTCDE
WHERE
QLVCDE.ECD_NUM(+) = LIGCDE.ECD_NUM
AND QLVCDE.LCD_LIGNE(+) = LIGCDE.LCD_LIGNE
AND ENTCDE.ECD_NUM(+) = LIGCDE.ECD_NUM
AND LIGCDE.ECD_NUM={param1}
GROUP BY
LIGCDE.ECD_NUM,LIGCDE.LCD_LIGNE,LIGCDE.LCD_ETAT,LIGCDE.LCD_QTE,
ENTCDE.ECD_ETAT
------------------

si je ne met pas l'avant derniere ligne de parametre cela fonctonne
bien je peux faire hExecuteRequete, puis hLitPremier etc.
Par contre si je rajoute la ligne de filtrage et que je passe un
parametre via hExecuterequete j'ai alors le message d'erreur systeme :
------------------------------------
Erreur à la ligne 2 du traitement Clic sur BTN_Bouton4.
Vous avez appelé la fonction HLitPremier.
Fichier <REQ_LIGCDE_QLVCDE> inconnu dans l'analyse <S:Informatique
priveTICWindevProjet ADV TurquieADV Turquie.wdd>, ou requête ou
vue non initialisée.
-----------------------------

Quelqu'un sait il d'ou vient le problème ?

Merci
Avatar
mat
Loko wrote:
...

J'ai également essayé avec
---------------------------------
TABLE..RubriqueParcourue¾_id
TABLE..Filtre=1
TableAffiche(TABLE)
----------------------------------

sans plus de succès.

Comment faut il faire ?




j'essayerais avec hFiltre, suivi par TableAffiche.

Salutations
Mat
Avatar
Loko
On 12 déc, 17:49, mat wrote:
Loko wrote:

...



> J'ai également essayé avec
> ---------------------------------
> TABLE..RubriqueParcourue¾_id
> TABLE..Filtre=1
> TableAffiche(TABLE)
> ----------------------------------

> sans plus de succès.

> Comment faut il faire ?

j'essayerais avec hFiltre, suivi par TableAffiche.

Salutations
Mat



Bonjour Mat

J'ai egalement essayé hFiltre, sans plus de succès.

j'ai également essayé directement
HExécuteRequêteSQL(REQ_QTELIV,hRequêteInterruptible,"select
sum(qlc_qteliv) as qte_livr from qlvcde where ecd_num=1")
hLitPremier(...)

et j'obtiens la meme erreur "REQ_QTELIV inconnu dans l'analyse ou
requete non initialisée" au moment du hLitPremier.

Par contre tout fonctionne si j'enleve la clause "where champ2=..." de
ma requete sql. Et ce pour n'importe quelle valeur et n'importe quel
champ de test.
Avatar
mat
Loko wrote:
Autre exemple un peu différent : j'ai une requete définie dans le
projet avec un group by :
-----------------
SELECT LIGCDE.ECD_NUM, LIGCDE.LCD_LIGNE, LIGCDE.LCD_ETAT,
LIGCDE.LCD_QTE, ENTCDE.ECD_ETAT, SUM(QLVCDE.QLC_QTELIV) as qte_livree
FROM LIGCDE, QLVCDE, ENTCDE
WHERE
QLVCDE.ECD_NUM(+) = LIGCDE.ECD_NUM
AND QLVCDE.LCD_LIGNE(+) = LIGCDE.LCD_LIGNE
AND ENTCDE.ECD_NUM(+) = LIGCDE.ECD_NUM
AND LIGCDE.ECD_NUM={param1}
GROUP BY
LIGCDE.ECD_NUM,LIGCDE.LCD_LIGNE,LIGCDE.LCD_ETAT,LIGCDE.LCD_QTE,
ENTCDE.ECD_ETAT
------------------

si je ne met pas l'avant derniere ligne de parametre cela fonctonne
bien je peux faire hExecuteRequete, puis hLitPremier etc.
Par contre si je rajoute la ligne de filtrage et que je passe un
parametre via hExecuterequete j'ai alors le message d'erreur systeme :
------------------------------------
Erreur à la ligne 2 du traitement Clic sur BTN_Bouton4.
Vous avez appelé la fonction HLitPremier.
Fichier <REQ_LIGCDE_QLVCDE> inconnu dans l'analyse <S:Informatique
priveTICWindevProjet ADV TurquieADV Turquie.wdd>, ou requête ou
vue non initialisée.
-----------------------------

Quelqu'un sait il d'ou vient le problème ?





Bonjour,

Non, je ne sais pas mais pour mieux comprendre, faudrait déjà indiquer
la version de Windev ([WD..]) dans le sujet et de quelle base de données
il s'agit. Le code n'a pas l'air d'être du HF (SQL 92), alors il faut
normalement utiliser hExecuteRequeteSQL avec le paramètre
hRequeteSansCorrection (ou quelque chose comme cela), sinon Windev
traduit vers HF. Mais cela dépend aussi de la version de Windev... :-)

Si c'était quand-même pour HF, je ferais les liaisons dans le from, pas
dans le where, ce dernier ne contenant que WHERE
LIGCDE.ECD_NUM={param1}. Autre solution est de mettre la requête dans
une chaîne (maReq= "... WHERE LIGCDE.ECD_NUM= " + maVariable) et lancer
avec hExecuteRequeteSQL.

Salutations
Mat
Avatar
J.B.
Le Wed, 12 Dec 2007 18:19:01 +0100, mat a écrit:

Loko wrote:
Autre exemple un peu différent : j'ai une requete définie dans le
projet avec un group by :
-----------------
SELECT LIGCDE.ECD_NUM, LIGCDE.LCD_LIGNE, LIGCDE.LCD_ETAT,
LIGCDE.LCD_QTE, ENTCDE.ECD_ETAT, SUM(QLVCDE.QLC_QTELIV) as qte_livree
FROM LIGCDE, QLVCDE, ENTCDE
WHERE
QLVCDE.ECD_NUM(+) = LIGCDE.ECD_NUM
AND QLVCDE.LCD_LIGNE(+) = LIGCDE.LCD_LIGNE
AND ENTCDE.ECD_NUM(+) = LIGCDE.ECD_NUM
AND LIGCDE.ECD_NUM={param1}
GROUP BY
LIGCDE.ECD_NUM,LIGCDE.LCD_LIGNE,LIGCDE.LCD_ETAT,LIGCDE.LCD_QTE,
ENTCDE.ECD_ETAT
------------------
si je ne met pas l'avant derniere ligne de parametre cela fonctonne
bien je peux faire hExecuteRequete, puis hLitPremier etc.
Par contre si je rajoute la ligne de filtrage et que je passe un
parametre via hExecuterequete j'ai alors le message d'erreur systeme :
------------------------------------
Erreur à la ligne 2 du traitement Clic sur BTN_Bouton4.
Vous avez appelé la fonction HLitPremier.
Fichier <REQ_LIGCDE_QLVCDE> inconnu dans l'analyse <S:Informatique
priveTICWindevProjet ADV TurquieADV Turquie.wdd>, ou requête ou
vue non initialisée.
-----------------------------
Quelqu'un sait il d'ou vient le problème ?





Bonjour,

Non, je ne sais pas mais pour mieux comprendre, faudrait déjà indiquer
la version de Windev ([WD..]) dans le sujet et de quelle base de données
il s'agit. Le code n'a pas l'air d'être du HF (SQL 92), alors il faut
normalement utiliser hExecuteRequeteSQL avec le paramètre
hRequeteSansCorrection (ou quelque chose comme cela), sinon Windev
traduit vers HF. Mais cela dépend aussi de la version de Windev... :-)

Si c'était quand-même pour HF, je ferais les liaisons dans le from, pas
dans le where, ce dernier ne contenant que WHERE
LIGCDE.ECD_NUM={param1}. Autre solution est de mettre la requête dans
une chaîne (maReq= "... WHERE LIGCDE.ECD_NUM= " + maVariable) et lancer
avec hExecuteRequeteSQL.

Salutations
Mat


Bonjour

Testes tu l'erreur au Hexecute... car si tu as une erreur non testée , le
Hlit se plante avec
requête inconnue (ce qui est normal).

Par ailleurs avant de mettre une requete SQL en WD il est commode de la
tester dans un interrogateur
SQL externe (par sqlplus dans le cas d'oracle). Nous utilisons AQT
(publicité gratuite).

Les fonctions de groupe demandent une certaine logique: si il y a un group
by , il ne peut y avoir dans
le select que des fonctions du même niveau.

--
J.Bratières
Avatar
Loko
Bonjour

Pour tester j'ai épuré ma requete temporairement, elle devient
"select sum(qlc_qteliv) as qteliv from qlvcde where ecd_num=1".

Là, j'obtiens une erreur "ORA-00937 not a single-group group
function".

Cette erreur disparait si j'enleve le "where" ou le "sum", mais un
where et un sum en meme temps fait planter la requete.

Cette requete fonctionne évidemment directement dans ma base
(sql*plus, Toad est bien aussi ;-) ) et j'obtiens la meme erreur si je
lance la requete dans WDMAP.

??