OVH Cloud OVH Cloud

SQL

16 réponses
Avatar
I.G.LOG
Bonsoir à tous.
Je suis toujours dans mes requetes SQL et je pietine !

Je voudrais recuperer toutes les lignes de commandes fournisseurs qui ne
sont pas soldées.

J'ai les tables suivantes
FOUCOM (entete commande fournisseur)
F4CLEUNIK (entier)
TERMINE (booleen) (commande soldée ou pas)

FOUCOMLG (lignes de commande)
F15CLEUNIK (entier)
F4CLEUNIK (identifiant commande)
QTE (reel) (qté commandée)

FOULIVCD (lignes d'une reception fournisseur)
F5CLEUNIK (entire: pointeur sur ligne commande)
F1CLEUNIK (identifiant B.L. fournisseur)
QTE (reel) (qté recue)


Et ma requete:

select F4.F4CLEUNIK, F4.DATE, F.RAISON, L.F5CLEUNIK, L.QTE
from FOUCOM F4, FOUCOMLG L
where (F4.TERMINE = 0)
and (L.F4CLEUNIK = F4.F4CLEUNIK)
having (L.QTE > (select sum(R.QTE) from FOULIVCD R where R.F5CLEUNIK =
L.F5CLEUNIK))

qui me retourne toutes les lignes de commandes meme si la quantite est
totalement recue ????
J'ai essayé avec des GROUP BY mais sans plus de succès ?!

Merci à tous pour vos conseils

10 réponses

1 2
Avatar
elecoest
Voici une requete qui devrait fonctionner en Oracle ...

select F4.F4CLEUNIK, F4.DATE, F.RAISON, L.F5CLEUNIK, L.QTE
from FOUCOM F4, FOUCOMLG L
where F4.TERMINE = 0
and L.F4CLEUNIK = F4.F4CLEUNIK
and L.QTE > (select sum(R.QTE) from FOULIVCD R where R.F5CLEUNIK L.F5CLEUNIK)

.. mais pas en MySQL.

Pourrais-tu (et les autres demandeurs d'aide sur le SQL) ajouter tout de
suite la base accédée car la solution est liée aux restrictions de la base
accédée. Merci

Emmanuel

"I.G.LOG" a écrit dans le message de news:
c5h9go$mi3$
Bonsoir à tous.
Je suis toujours dans mes requetes SQL et je pietine !

Je voudrais recuperer toutes les lignes de commandes fournisseurs qui ne
sont pas soldées.

J'ai les tables suivantes
FOUCOM (entete commande fournisseur)
F4CLEUNIK (entier)
TERMINE (booleen) (commande soldée ou pas)

FOUCOMLG (lignes de commande)
F15CLEUNIK (entier)
F4CLEUNIK (identifiant commande)
QTE (reel) (qté commandée)

FOULIVCD (lignes d'une reception fournisseur)
F5CLEUNIK (entire: pointeur sur ligne commande)
F1CLEUNIK (identifiant B.L. fournisseur)
QTE (reel) (qté recue)


Et ma requete:

select F4.F4CLEUNIK, F4.DATE, F.RAISON, L.F5CLEUNIK, L.QTE
from FOUCOM F4, FOUCOMLG L
where (F4.TERMINE = 0)
and (L.F4CLEUNIK = F4.F4CLEUNIK)
having (L.QTE > (select sum(R.QTE) from FOULIVCD R where R.F5CLEUNIK > L.F5CLEUNIK))

qui me retourne toutes les lignes de commandes meme si la quantite est
totalement recue ????
J'ai essayé avec des GROUP BY mais sans plus de succès ?!

Merci à tous pour vos conseils






---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.618 / Virus Database: 397 - Release Date: 09/03/2004
Avatar
Roumegou
Après mure réflexion, I.G.LOG a écrit :
Bonsoir à tous.
Je suis toujours dans mes requetes SQL et je pietine !

Je voudrais recuperer toutes les lignes de commandes fournisseurs qui ne
sont pas soldées.

J'ai les tables suivantes
FOUCOM (entete commande fournisseur)
F4CLEUNIK (entier)
TERMINE (booleen) (commande soldée ou pas)

FOUCOMLG (lignes de commande)
F15CLEUNIK (entier)
F4CLEUNIK (identifiant commande)
QTE (reel) (qté commandée)

FOULIVCD (lignes d'une reception fournisseur)
F5CLEUNIK (entire: pointeur sur ligne commande)
F1CLEUNIK (identifiant B.L. fournisseur)
QTE (reel) (qté recue)


Et ma requete:

select F4.F4CLEUNIK, F4.DATE, F.RAISON, L.F5CLEUNIK, L.QTE
from FOUCOM F4, FOUCOMLG L
where (F4.TERMINE = 0)
and (L.F4CLEUNIK = F4.F4CLEUNIK)
having (L.QTE > (select sum(R.QTE) from FOULIVCD R where R.F5CLEUNIK > L.F5CLEUNIK))



pourquoi having ? tu ne fais pas de tests sur des agrégats ?
Essaie Where à la place de having.

Le having servirait si tu avais un group by.

juste une remarque ! je trouve que préfixer les colonnes avec un alias
aussi court et aussi peu parlant qu'une lettre n'est pas une bonne
idée. Autant mettre carrement le nom de la table, c'est beaucoup plus
clair et l'on n'a pas besoin de remonter dans la requete pour savoir
que L c'est FoUCOMLG etc ...

Ce n'est pas les qq caractères que tu vas gagner dans ton flux de
données qui vont peser mais surtout tu perdras du temps ensuite pour
maintenir ton code.



qui me retourne toutes les lignes de commandes meme si la quantite est
totalement recue ????
J'ai essayé avec des GROUP BY mais sans plus de succès ?!

Merci à tous pour vos conseils



--
Eric Roumegou
http://cerbermail.com/?TSoulBerPA
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
I.G.LOG
Meric pour la suggestion: en effet beaucoup plus lisible et maintenable.
En ce qui concerne la requete, j'avais essayé avec where (... and (L.QTE >
(select sum(R.QTE) from FOULIVCD R where R.F5CLEUNIK = L.F5CLEUNIK))
mais le programme reste bloqué pendant l'exécution de cette requete ?!?

"Roumegou" a écrit dans le message de
news:
Après mure réflexion, I.G.LOG a écrit :
> Bonsoir à tous.
> Je suis toujours dans mes requetes SQL et je pietine !
>
> Je voudrais recuperer toutes les lignes de commandes fournisseurs qui ne
> sont pas soldées.
>
> J'ai les tables suivantes
> FOUCOM (entete commande fournisseur)
> F4CLEUNIK (entier)
> TERMINE (booleen) (commande soldée ou pas)
>
> FOUCOMLG (lignes de commande)
> F15CLEUNIK (entier)
> F4CLEUNIK (identifiant commande)
> QTE (reel) (qté commandée)
>
> FOULIVCD (lignes d'une reception fournisseur)
> F5CLEUNIK (entire: pointeur sur ligne commande)
> F1CLEUNIK (identifiant B.L. fournisseur)
> QTE (reel) (qté recue)
>
>
> Et ma requete:
>
> select F4.F4CLEUNIK, F4.DATE, F.RAISON, L.F5CLEUNIK, L.QTE
> from FOUCOM F4, FOUCOMLG L
> where (F4.TERMINE = 0)
> and (L.F4CLEUNIK = F4.F4CLEUNIK)
> having (L.QTE > (select sum(R.QTE) from FOULIVCD R where R.F5CLEUNIK > > L.F5CLEUNIK))

pourquoi having ? tu ne fais pas de tests sur des agrégats ?
Essaie Where à la place de having.

Le having servirait si tu avais un group by.

juste une remarque ! je trouve que préfixer les colonnes avec un alias
aussi court et aussi peu parlant qu'une lettre n'est pas une bonne
idée. Autant mettre carrement le nom de la table, c'est beaucoup plus
clair et l'on n'a pas besoin de remonter dans la requete pour savoir
que L c'est FoUCOMLG etc ...

Ce n'est pas les qq caractères que tu vas gagner dans ton flux de
données qui vont peser mais surtout tu perdras du temps ensuite pour
maintenir ton code.


>
> qui me retourne toutes les lignes de commandes meme si la quantite est
> totalement recue ????
> J'ai essayé avec des GROUP BY mais sans plus de succès ?!
>
> Merci à tous pour vos conseils

--
Eric Roumegou
http://cerbermail.com/?TSoulBerPA
(cliquez sur le lien ci-dessus pour me contacter en privé)



Avatar
Roumegou
Après mure réflexion, I.G.LOG a écrit :
Meric pour la suggestion: en effet beaucoup plus lisible et maintenable.
En ce qui concerne la requete, j'avais essayé avec where (... and (L.QTE >
(select sum(R.QTE) from FOULIVCD R where R.F5CLEUNIK = L.F5CLEUNIK))
mais le programme reste bloqué pendant l'exécution de cette requete ?!?



attention ce genre de requetes va dépendre beaucoup des index. Dans ton
cas, il doit aller sans dire que FOULIVCD.FCLEUNIK est un index de
FOULIVCD.

Mais c'est apparemment de l'HF alors je ne connais pas trop (comme cela
a déja été demandé, n'oubliez pas de préciser le sgbd)
Sur oracle par ex, chez un de mes clients une requete de ce genre sur
des tables de plusieurs millions était donnée pour 6h50; une fois
rajouté l'index; elle s'est faite en 60 secondes.

--
Eric Roumegou
http://cerbermail.com/?TSoulBerPA
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
Firetox
Bonjour,

avec un alias sur la table des FOUCOM vous pouvez avoir cette requete
elle permet un parcous sur les 2 chaine de façon distinct et ne sont
regroupe
que par la jointure des tables FOUCOM qui permet d'avoir la requete
cherchée.

SELECT
FOUCOM .F4CLEUNIK, FOUCOM .DATE, FOUCOM .RAISON,
FOUCOMLG .F5CLEUNIK, FOUCOMLG .QTE
FROM
FOUCOM FA LEFT JOIN FOUCOMLG USING (F4CLEUNIK),
FOUCOM FB LEFT JOIN FOULIVCD USING (F5CLEUNIK)

WHERE
FA .F4CLEUNIK = FB.F4CLEUNIK // jointure des 2 alias
AND FA.TERMINE = 0

GROUP BY FOULIVCD.F5CLEUNIK

HAVING FOUCOMLG .QTE > SUM(FOULIVCD.QTE )


Bon dev
@+

Firetox

"I.G.LOG" a écrit dans le message de news:
c5h9go$mi3$
Bonsoir à tous.
Je suis toujours dans mes requetes SQL et je pietine !

Je voudrais recuperer toutes les lignes de commandes fournisseurs qui ne
sont pas soldées.

J'ai les tables suivantes
FOUCOM (entete commande fournisseur)
F4CLEUNIK (entier)
TERMINE (booleen) (commande soldée ou pas)

FOUCOMLG (lignes de commande)
F15CLEUNIK (entier)
F4CLEUNIK (identifiant commande)
QTE (reel) (qté commandée)

FOULIVCD (lignes d'une reception fournisseur)
F5CLEUNIK (entire: pointeur sur ligne commande)
F1CLEUNIK (identifiant B.L. fournisseur)
QTE (reel) (qté recue)


Et ma requete:

select F4.F4CLEUNIK, F4.DATE, F.RAISON, L.F5CLEUNIK, L.QTE
from FOUCOM F4, FOUCOMLG L
where (F4.TERMINE = 0)
and (L.F4CLEUNIK = F4.F4CLEUNIK)
having (L.QTE > (select sum(R.QTE) from FOULIVCD R where R.F5CLEUNIK > L.F5CLEUNIK))

qui me retourne toutes les lignes de commandes meme si la quantite est
totalement recue ????
J'ai essayé avec des GROUP BY mais sans plus de succès ?!

Merci à tous pour vos conseils




Avatar
I.G.LOG
Tous les index sont bien présents (FOULIVCD.F5CLEUNIK est une clé). Il
faudrait que je patiente pour voir combien de temps met exactement la
requete à s'exécuter, mais, dans tous les cas, je ne pense pas que ce temps
soit "acceptable" (sutout que mes tests sont effectiués en locla mais que le
programme utilisateur est en réseau)
PS: base de données HF (je n'oublierai plus de l'indiquer)
Merci

"Roumegou" a écrit dans le message de
news:
Après mure réflexion, I.G.LOG a écrit :
> Meric pour la suggestion: en effet beaucoup plus lisible et maintenable.
> En ce qui concerne la requete, j'avais essayé avec where (... and (L.QTE

> (select sum(R.QTE) from FOULIVCD R where R.F5CLEUNIK = L.F5CLEUNIK))
> mais le programme reste bloqué pendant l'exécution de cette requete ?!?
>
attention ce genre de requetes va dépendre beaucoup des index. Dans ton
cas, il doit aller sans dire que FOULIVCD.FCLEUNIK est un index de
FOULIVCD.

Mais c'est apparemment de l'HF alors je ne connais pas trop (comme cela
a déja été demandé, n'oubliez pas de préciser le sgbd)
Sur oracle par ex, chez un de mes clients une requete de ce genre sur
des tables de plusieurs millions était donnée pour 6h50; une fois
rajouté l'index; elle s'est faite en 60 secondes.

--
Eric Roumegou
http://cerbermail.com/?TSoulBerPA
(cliquez sur le lien ci-dessus pour me contacter en privé)



Avatar
I.G.LOG
J'ai même essayé plus simplement (puisque le lignes de commande soldées ont
forcemment des livraisons):

select FOUCOM .F4CLEUNIK, FOUCOM .DATE, FOUCOM .RAISON,
FOUCOMLG .F5CLEUNIK, FOUCOMLG .QTE
from FOUCOM FOUCOM, FOUCOMLG FOUCOMLG, FOULIVCD FOULIVCD
where FOUCOM.TERMINE = 0
and FOUCOMLG.F4CLEUNIK = FOUCOM.F4CLEUNIK
and FOULIVCD.F5CLEUNIK = FOUCOMLG.F5CLEUNIK
group by FOULIVCD.F5CLEUNIK
having FOUCOMLG.QTE > SUM(FOULIVCD.QTE)

mais rien n'y fait, la requete ne me renvoie rien. J'ai testé les fichiers,
il y a bien des enregistrements non soldés ?!
NB: fichiers HF 5.5

"Firetox" a écrit dans le message de
news:c5imab$1qp$
Bonjour,

avec un alias sur la table des FOUCOM vous pouvez avoir cette requete
elle permet un parcous sur les 2 chaine de façon distinct et ne sont
regroupe
que par la jointure des tables FOUCOM qui permet d'avoir la requete
cherchée.

SELECT
FOUCOM .F4CLEUNIK, FOUCOM .DATE, FOUCOM .RAISON,
FOUCOMLG .F5CLEUNIK, FOUCOMLG .QTE
FROM
FOUCOM FA LEFT JOIN FOUCOMLG USING (F4CLEUNIK),
FOUCOM FB LEFT JOIN FOULIVCD USING (F5CLEUNIK)

WHERE
FA .F4CLEUNIK = FB.F4CLEUNIK // jointure des 2 alias
AND FA.TERMINE = 0

GROUP BY FOULIVCD.F5CLEUNIK

HAVING FOUCOMLG .QTE > SUM(FOULIVCD.QTE )


Bon dev
@+

Firetox

"I.G.LOG" a écrit dans le message de news:
c5h9go$mi3$
> Bonsoir à tous.
> Je suis toujours dans mes requetes SQL et je pietine !
>
> Je voudrais recuperer toutes les lignes de commandes fournisseurs qui ne
> sont pas soldées.
>
> J'ai les tables suivantes
> FOUCOM (entete commande fournisseur)
> F4CLEUNIK (entier)
> TERMINE (booleen) (commande soldée ou pas)
>
> FOUCOMLG (lignes de commande)
> F15CLEUNIK (entier)
> F4CLEUNIK (identifiant commande)
> QTE (reel) (qté commandée)
>
> FOULIVCD (lignes d'une reception fournisseur)
> F5CLEUNIK (entire: pointeur sur ligne commande)
> F1CLEUNIK (identifiant B.L. fournisseur)
> QTE (reel) (qté recue)
>
>
> Et ma requete:
>
> select F4.F4CLEUNIK, F4.DATE, F.RAISON, L.F5CLEUNIK, L.QTE
> from FOUCOM F4, FOUCOMLG L
> where (F4.TERMINE = 0)
> and (L.F4CLEUNIK = F4.F4CLEUNIK)
> having (L.QTE > (select sum(R.QTE) from FOULIVCD R where R.F5CLEUNIK > > L.F5CLEUNIK))
>
> qui me retourne toutes les lignes de commandes meme si la quantite est
> totalement recue ????
> J'ai essayé avec des GROUP BY mais sans plus de succès ?!
>
> Merci à tous pour vos conseils
>
>




Avatar
Firetox
Petite question

une ligne de commande peut faire l'objet de plusieurs ligne de reception ?
essaye d'inversee la condition : having FOUCOMLG.QTE <= SUM(FOULIVCD.QTE)
si tu obtient toutes les lignes ca veut dire que la condition n'est pas
bonne

sur mon test j'ai une ligne de reception pour une ligne de commande (donc
pas deSUM)
et ca fonctionne. maitenant il faut vraiement connaitre la struture de la
base (surtout les cardinalite entre les entite car sinon on va tourner en
rond)

bon dev
@+


"I.G.LOG" a écrit dans le message de news:
c5iocl$7m3$
J'ai même essayé plus simplement (puisque le lignes de commande soldées


ont
forcemment des livraisons):

select FOUCOM .F4CLEUNIK, FOUCOM .DATE, FOUCOM .RAISON,
FOUCOMLG .F5CLEUNIK, FOUCOMLG .QTE
from FOUCOM FOUCOM, FOUCOMLG FOUCOMLG, FOULIVCD FOULIVCD
where FOUCOM.TERMINE = 0
and FOUCOMLG.F4CLEUNIK = FOUCOM.F4CLEUNIK
and FOULIVCD.F5CLEUNIK = FOUCOMLG.F5CLEUNIK
group by FOULIVCD.F5CLEUNIK
having FOUCOMLG.QTE > SUM(FOULIVCD.QTE)

mais rien n'y fait, la requete ne me renvoie rien. J'ai testé les


fichiers,
il y a bien des enregistrements non soldés ?!
NB: fichiers HF 5.5

"Firetox" a écrit dans le message de
news:c5imab$1qp$
> Bonjour,
>
> avec un alias sur la table des FOUCOM vous pouvez avoir cette requete
> elle permet un parcous sur les 2 chaine de façon distinct et ne sont
> regroupe
> que par la jointure des tables FOUCOM qui permet d'avoir la requete
> cherchée.
>
> SELECT
> FOUCOM .F4CLEUNIK, FOUCOM .DATE, FOUCOM .RAISON,
> FOUCOMLG .F5CLEUNIK, FOUCOMLG .QTE
> FROM
> FOUCOM FA LEFT JOIN FOUCOMLG USING (F4CLEUNIK),
> FOUCOM FB LEFT JOIN FOULIVCD USING (F5CLEUNIK)
>
> WHERE
> FA .F4CLEUNIK = FB.F4CLEUNIK // jointure des 2 alias
> AND FA.TERMINE = 0
>
> GROUP BY FOULIVCD.F5CLEUNIK
>
> HAVING FOUCOMLG .QTE > SUM(FOULIVCD.QTE )
>
>
> Bon dev
> @+
>
> Firetox
>
> "I.G.LOG" a écrit dans le message de news:
> c5h9go$mi3$
> > Bonsoir à tous.
> > Je suis toujours dans mes requetes SQL et je pietine !
> >
> > Je voudrais recuperer toutes les lignes de commandes fournisseurs qui


ne
> > sont pas soldées.
> >
> > J'ai les tables suivantes
> > FOUCOM (entete commande fournisseur)
> > F4CLEUNIK (entier)
> > TERMINE (booleen) (commande soldée ou pas)
> >
> > FOUCOMLG (lignes de commande)
> > F15CLEUNIK (entier)
> > F4CLEUNIK (identifiant commande)
> > QTE (reel) (qté commandée)
> >
> > FOULIVCD (lignes d'une reception fournisseur)
> > F5CLEUNIK (entire: pointeur sur ligne commande)
> > F1CLEUNIK (identifiant B.L. fournisseur)
> > QTE (reel) (qté recue)
> >
> >
> > Et ma requete:
> >
> > select F4.F4CLEUNIK, F4.DATE, F.RAISON, L.F5CLEUNIK, L.QTE
> > from FOUCOM F4, FOUCOMLG L
> > where (F4.TERMINE = 0)
> > and (L.F4CLEUNIK = F4.F4CLEUNIK)
> > having (L.QTE > (select sum(R.QTE) from FOULIVCD R where R.F5CLEUNIK > > > L.F5CLEUNIK))
> >
> > qui me retourne toutes les lignes de commandes meme si la quantite est
> > totalement recue ????
> > J'ai essayé avec des GROUP BY mais sans plus de succès ?!
> >
> > Merci à tous pour vos conseils
> >
> >
>
>




Avatar
I.G.LOG
Oui, chaque ligne de commande peut avoir plusieurs reception fournisseur
(livraison en plusieurs BL)

La requete suivante ne donne rien:

select FOUCOM.F4CLEUNIK, FOUCOM.DATE, FOUCOMLG.F5CLEUNIK, FOUCOMLG.QTE
from FOUCOM FOUCOM, FOUCOMLG FOUCOMLG, FOULIVCD FOULIVCD
where FOUCOM.TERMINE = 0
and FOUCOMLG.F4CLEUNIK = FOUCOM.F4CLEUNIK
and FOULIVCD.F5CLEUNIK = FOUCOMLG.F5CLEUNIK
group by FOUCOM.F4CLEUNIK, FOUCOM.DATE, FOUCOMLG.F5CLEUNIK, FOUCOMLG.QTE
having FOUCOMLG.QTE > SUM(FOULIVCD.QTE)

si j'utilise having FOUCOMLG.QTE <= SUM(FOULIVCD.QTE) la requete me renvoie
des résultats mais qui correspondent à quoi ?
(normallement les lignes de commandes qui ont ete livrées - ou plus)
Je craque sur ce problème qui semble simple pourtant !!!

PS: ai essayé:
select FOUCOM.F4CLEUNIK, FOUCOM.DATE, FOUCOMLG.F5CLEUNIK, FOUCOMLG.QTE,
sum(FOULIVCD.QTE) as QteRecue
from FOUCOM FOUCOM, FOUCOMLG FOUCOMLG, FOULIVCD FOULIVCD
where FOUCOM.TERMINE = 0
and FOUCOMLG.F4CLEUNIK = FOUCOM.F4CLEUNIK
and FOULIVCD.F5CLEUNIK = FOUCOMLG.F5CLEUNIK
group by FOUCOM.F4CLEUNIK, FOUCOM.DATE, FOUCOMLG.F5CLEUNIK, FOUCOMLG.QTE
having FOUCOMLG.QTE > QteRecue

sans plus de succes !


"Firetox" a écrit dans le message de
news:c5iop7$31c$
Petite question

une ligne de commande peut faire l'objet de plusieurs ligne de reception ?
essaye d'inversee la condition : having FOUCOMLG.QTE <= SUM(FOULIVCD.QTE)
si tu obtient toutes les lignes ca veut dire que la condition n'est pas
bonne

sur mon test j'ai une ligne de reception pour une ligne de commande (donc
pas deSUM)
et ca fonctionne. maitenant il faut vraiement connaitre la struture de la
base (surtout les cardinalite entre les entite car sinon on va tourner en
rond)

bon dev
@+


"I.G.LOG" a écrit dans le message de news:
c5iocl$7m3$
> J'ai même essayé plus simplement (puisque le lignes de commande soldées
ont
> forcemment des livraisons):
>
> select FOUCOM .F4CLEUNIK, FOUCOM .DATE, FOUCOM .RAISON,
> FOUCOMLG .F5CLEUNIK, FOUCOMLG .QTE
> from FOUCOM FOUCOM, FOUCOMLG FOUCOMLG, FOULIVCD FOULIVCD
> where FOUCOM.TERMINE = 0
> and FOUCOMLG.F4CLEUNIK = FOUCOM.F4CLEUNIK
> and FOULIVCD.F5CLEUNIK = FOUCOMLG.F5CLEUNIK
> group by FOULIVCD.F5CLEUNIK
> having FOUCOMLG.QTE > SUM(FOULIVCD.QTE)
>
> mais rien n'y fait, la requete ne me renvoie rien. J'ai testé les
fichiers,
> il y a bien des enregistrements non soldés ?!
> NB: fichiers HF 5.5
>
> "Firetox" a écrit dans le message de
> news:c5imab$1qp$
> > Bonjour,
> >
> > avec un alias sur la table des FOUCOM vous pouvez avoir cette requete
> > elle permet un parcous sur les 2 chaine de façon distinct et ne sont
> > regroupe
> > que par la jointure des tables FOUCOM qui permet d'avoir la requete
> > cherchée.
> >
> > SELECT
> > FOUCOM .F4CLEUNIK, FOUCOM .DATE, FOUCOM .RAISON,
> > FOUCOMLG .F5CLEUNIK, FOUCOMLG .QTE
> > FROM
> > FOUCOM FA LEFT JOIN FOUCOMLG USING (F4CLEUNIK),
> > FOUCOM FB LEFT JOIN FOULIVCD USING (F5CLEUNIK)
> >
> > WHERE
> > FA .F4CLEUNIK = FB.F4CLEUNIK // jointure des 2 alias
> > AND FA.TERMINE = 0
> >
> > GROUP BY FOULIVCD.F5CLEUNIK
> >
> > HAVING FOUCOMLG .QTE > SUM(FOULIVCD.QTE )
> >
> >
> > Bon dev
> > @+
> >
> > Firetox
> >
> > "I.G.LOG" a écrit dans le message de news:
> > c5h9go$mi3$
> > > Bonsoir à tous.
> > > Je suis toujours dans mes requetes SQL et je pietine !
> > >
> > > Je voudrais recuperer toutes les lignes de commandes fournisseurs


qui
ne
> > > sont pas soldées.
> > >
> > > J'ai les tables suivantes
> > > FOUCOM (entete commande fournisseur)
> > > F4CLEUNIK (entier)
> > > TERMINE (booleen) (commande soldée ou pas)
> > >
> > > FOUCOMLG (lignes de commande)
> > > F15CLEUNIK (entier)
> > > F4CLEUNIK (identifiant commande)
> > > QTE (reel) (qté commandée)
> > >
> > > FOULIVCD (lignes d'une reception fournisseur)
> > > F5CLEUNIK (entire: pointeur sur ligne commande)
> > > F1CLEUNIK (identifiant B.L. fournisseur)
> > > QTE (reel) (qté recue)
> > >
> > >
> > > Et ma requete:
> > >
> > > select F4.F4CLEUNIK, F4.DATE, F.RAISON, L.F5CLEUNIK, L.QTE
> > > from FOUCOM F4, FOUCOMLG L
> > > where (F4.TERMINE = 0)
> > > and (L.F4CLEUNIK = F4.F4CLEUNIK)
> > > having (L.QTE > (select sum(R.QTE) from FOULIVCD R where R.F5CLEUNIK


> > > > L.F5CLEUNIK))
> > >
> > > qui me retourne toutes les lignes de commandes meme si la quantite


est
> > > totalement recue ????
> > > J'ai essayé avec des GROUP BY mais sans plus de succès ?!
> > >
> > > Merci à tous pour vos conseils
> > >
> > >
> >
> >
>
>




Avatar
Firetox
"I.G.LOG" a écrit dans le message de news:
c5irim$2mc$
Oui, chaque ligne de commande peut avoir plusieurs reception fournisseur
(livraison en plusieurs BL)

La requete suivante ne donne rien:

select FOUCOM.F4CLEUNIK, FOUCOM.DATE, FOUCOMLG.F5CLEUNIK, FOUCOMLG.QTE
from FOUCOM FOUCOM, FOUCOMLG FOUCOMLG, FOULIVCD FOULIVCD
where FOUCOM.TERMINE = 0
and FOUCOMLG.F4CLEUNIK = FOUCOM.F4CLEUNIK
and FOULIVCD.F5CLEUNIK = FOUCOMLG.F5CLEUNIK
group by FOUCOM.F4CLEUNIK, FOUCOM.DATE, FOUCOMLG.F5CLEUNIK, FOUCOMLG.QTE
having FOUCOMLG.QTE > SUM(FOULIVCD.QTE)



on a ici des jointures fermees donc n'apparaitront pas les commandes qui
n'ont pas ete livrees
(car pas de ligne dans FOULIVCD) c'est pour ca que j'avais utiliser LEFT
JOIN pour avoir egalement les commandes non livrees.


si j'utilise having FOUCOMLG.QTE <= SUM(FOULIVCD.QTE) la requete me


renvoie
des résultats mais qui correspondent à quoi ?
(normallement les lignes de commandes qui ont ete livrées - ou plus)
Je craque sur ce problème qui semble simple pourtant !!!



la requete devrait renvoyer les commandes livrees complemetement ou non ,
mais qui ont deja eu au moins une livraison



PS: ai essayé:
select FOUCOM.F4CLEUNIK, FOUCOM.DATE, FOUCOMLG.F5CLEUNIK, FOUCOMLG.QTE,
sum(FOULIVCD.QTE) as QteRecue
from FOUCOM FOUCOM, FOUCOMLG FOUCOMLG, FOULIVCD FOULIVCD
where FOUCOM.TERMINE = 0
and FOUCOMLG.F4CLEUNIK = FOUCOM.F4CLEUNIK
and FOULIVCD.F5CLEUNIK = FOUCOMLG.F5CLEUNIK
group by FOUCOM.F4CLEUNIK, FOUCOM.DATE, FOUCOMLG.F5CLEUNIK, FOUCOMLG.QTE
having FOUCOMLG.QTE > QteRecue

sans plus de succes !


idem precedement la jointure est fermee

que donne la requete que j'ai ecrit
car il faut obsolument un alias sur la table de depart car les parcours sont
bien differents ?


"Firetox" a écrit dans le message de
news:c5iop7$31c$
> Petite question
>
> une ligne de commande peut faire l'objet de plusieurs ligne de reception


?
> essaye d'inversee la condition : having FOUCOMLG.QTE < SUM(FOULIVCD.QTE)
> si tu obtient toutes les lignes ca veut dire que la condition n'est pas
> bonne
>
> sur mon test j'ai une ligne de reception pour une ligne de commande


(donc
> pas deSUM)
> et ca fonctionne. maitenant il faut vraiement connaitre la struture de


la
> base (surtout les cardinalite entre les entite car sinon on va tourner


en
> rond)
>
> bon dev
> @+
>
>
> "I.G.LOG" a écrit dans le message de news:
> c5iocl$7m3$
> > J'ai même essayé plus simplement (puisque le lignes de commande


soldées
> ont
> > forcemment des livraisons):
> >
> > select FOUCOM .F4CLEUNIK, FOUCOM .DATE, FOUCOM .RAISON,
> > FOUCOMLG .F5CLEUNIK, FOUCOMLG .QTE
> > from FOUCOM FOUCOM, FOUCOMLG FOUCOMLG, FOULIVCD FOULIVCD
> > where FOUCOM.TERMINE = 0
> > and FOUCOMLG.F4CLEUNIK = FOUCOM.F4CLEUNIK
> > and FOULIVCD.F5CLEUNIK = FOUCOMLG.F5CLEUNIK
> > group by FOULIVCD.F5CLEUNIK
> > having FOUCOMLG.QTE > SUM(FOULIVCD.QTE)
> >
> > mais rien n'y fait, la requete ne me renvoie rien. J'ai testé les
> fichiers,
> > il y a bien des enregistrements non soldés ?!
> > NB: fichiers HF 5.5
> >
> > "Firetox" a écrit dans le message de
> > news:c5imab$1qp$
> > > Bonjour,
> > >
> > > avec un alias sur la table des FOUCOM vous pouvez avoir cette


requete
> > > elle permet un parcous sur les 2 chaine de façon distinct et ne sont
> > > regroupe
> > > que par la jointure des tables FOUCOM qui permet d'avoir la requete
> > > cherchée.
> > >
> > > SELECT
> > > FOUCOM .F4CLEUNIK, FOUCOM .DATE, FOUCOM .RAISON,
> > > FOUCOMLG .F5CLEUNIK, FOUCOMLG .QTE
> > > FROM
> > > FOUCOM FA LEFT JOIN FOUCOMLG USING (F4CLEUNIK),
> > > FOUCOM FB LEFT JOIN FOULIVCD USING (F5CLEUNIK)
> > >
> > > WHERE
> > > FA .F4CLEUNIK = FB.F4CLEUNIK // jointure des 2 alias
> > > AND FA.TERMINE = 0
> > >
> > > GROUP BY FOULIVCD.F5CLEUNIK
> > >
> > > HAVING FOUCOMLG .QTE > SUM(FOULIVCD.QTE )
> > >
> > >
> > > Bon dev
> > > @+
> > >
> > > Firetox
> > >
> > > "I.G.LOG" a écrit dans le message de news:
> > > c5h9go$mi3$
> > > > Bonsoir à tous.
> > > > Je suis toujours dans mes requetes SQL et je pietine !
> > > >
> > > > Je voudrais recuperer toutes les lignes de commandes fournisseurs
qui
> ne
> > > > sont pas soldées.
> > > >
> > > > J'ai les tables suivantes
> > > > FOUCOM (entete commande fournisseur)
> > > > F4CLEUNIK (entier)
> > > > TERMINE (booleen) (commande soldée ou pas)
> > > >
> > > > FOUCOMLG (lignes de commande)
> > > > F15CLEUNIK (entier)
> > > > F4CLEUNIK (identifiant commande)
> > > > QTE (reel) (qté commandée)
> > > >
> > > > FOULIVCD (lignes d'une reception fournisseur)
> > > > F5CLEUNIK (entire: pointeur sur ligne commande)
> > > > F1CLEUNIK (identifiant B.L. fournisseur)
> > > > QTE (reel) (qté recue)
> > > >
> > > >
> > > > Et ma requete:
> > > >
> > > > select F4.F4CLEUNIK, F4.DATE, F.RAISON, L.F5CLEUNIK, L.QTE
> > > > from FOUCOM F4, FOUCOMLG L
> > > > where (F4.TERMINE = 0)
> > > > and (L.F4CLEUNIK = F4.F4CLEUNIK)
> > > > having (L.QTE > (select sum(R.QTE) from FOULIVCD R where


R.F5CLEUNIK
> > > > > L.F5CLEUNIK))
> > > >
> > > > qui me retourne toutes les lignes de commandes meme si la quantite
est
> > > > totalement recue ????
> > > > J'ai essayé avec des GROUP BY mais sans plus de succès ?!
> > > >
> > > > Merci à tous pour vos conseils
> > > >
> > > >
> > >
> > >
> >
> >
>
>




1 2