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

Requete Externe

2 réponses
Avatar
Marc
Bonjour,
Je dispose une requete qui me renvoie les qté d'articles en commande par
clients (ci dessous).
Chaque client qui a passé une commande est donc intégré à ma requête et je
peux donc voir ce qu'un client a commandé.
Mon besoin est de voir aussi ce que le client n'a pas commandé. J'ai donc
besoin d'intégrer au résultat de ma requête les clients qui n'ont pas
commandé les articles de ma base. Pour chaque couple (client, article) j'ai
donc besoin d'avoir le résultat, mais avec la quantité (DL_Qte) = 0.
Quelqu'un peut-il m'aider?
Ci dessous ma requete. La table client est F_COMPTET, la table article est
F_ARTICLE, et la table des ventes est F_DOCLIGNE...
Par avance merci

Select ALL F_COMPTET.RE_No, Editeur, fCptT.CT_Statistique01,
fCptT.CT_Statistique02, fCptT.CT_Num, fCptT.CT_Intitule, SemSortie, annee,
mois, AR_Ref, AR_Design, FA_CodeFamille, Date_Sortie, QCmde, QLivr
from
F_COMPTET fCptT,
(SELECT Editeur, cumligne.CT_Num, SemSortie, Mois, Annee, AR_Ref, AR_Design,
FA_CodeFamille, Date_Sortie, SUM(QCmde) as QCmde
FROM
--Commandes en cours
(SELECT Editeur_Fournisseur as Editeur, fDoc.CT_Num, fArt.AR_Ref,
fArt.AR_Design, fArt.FA_CodeFamille, fArt.Date_Sortie, fDoc.DO_Type,
Datepart(ww, fArt.Date_Sortie) SemSortie, Month(fDoc.DO_Date) Mois ,
Year(fDoc.DO_Date) Annee,
(CASE WHEN fDoc.DO_Type>=4 and fDoc.DO_Type<=5
THEN -DL_Qte
ELSE DL_Qte
END) QCmde
FROM F_DOCLIGNE fDoc, F_ARTICLE fArt, F_DOCENTETE fEnt
WHERE (fEnt.DO_Type = fDoc.DO_Type and fEnt.DO_Piece = fDoc.DO_Piece
and fDoc.DO_Domaine=0 and fDoc.DO_Type=1
and fDoc.DL_Valorise=1
and fDoc.DL_TRemExep<2
and fDoc.DO_Date>='01-01-2007'
and fDoc.DO_Date<='31-12-2009'
and fDoc.DL_NonLivre=0 and fArt.AR_Ref=fDoc.AR_Ref
)

) cumligne

GROUP BY cumligne.CT_Num, cumligne.AR_Ref, AR_Design, FA_CodeFamille,
Date_Sortie, SemSortie, Annee, Mois, Editeur)TotCumLigne
LEFT OUTER JOIN F_COMPTET On F_COMPTET.CT_Num=TotCumligne.CT_Num
where TotCumLigne.CT_Num = convert(varbinary,fCptT.CT_Num)
order by ar_ref, ct_statistique01

2 réponses

Avatar
OokieDookie
Bonjour,

Les Editions Pilotées ne "gèrent" les jointures de façon obsolète... et
inappropriée pour ce genre de demande : la solution la plus simple consiste à
créer un nouveau fournisseur de données en ne demandant que le numéro de
compte et l'intitulé du client.

- Si la requête que vous avez postée est générée par BO, il n'y a qu'à
remplacer votre notion de n° de client actuelle par celle rapatriée par le
nouveau fournisseur de données.
- Si c'est une requête SQL à la carte, passez par Visualiser les données /
Définition, et liez la dimension N° de client de votre deuxième fournisseur à
la dimension CT_Num de la première requête avant de procéder au remplacement.

PS: Essayez le forum www.zoom.fr si vos problématiques concernent les
Editions Pilotées ;)



"Marc" a écrit :

Bonjour,
Je dispose une requete qui me renvoie les qté d'articles en commande par
clients (ci dessous).
Chaque client qui a passé une commande est donc intégré à ma requête et je
peux donc voir ce qu'un client a commandé.
Mon besoin est de voir aussi ce que le client n'a pas commandé. J'ai donc
besoin d'intégrer au résultat de ma requête les clients qui n'ont pas
commandé les articles de ma base. Pour chaque couple (client, article) j'ai
donc besoin d'avoir le résultat, mais avec la quantité (DL_Qte) = 0.
Quelqu'un peut-il m'aider?
Ci dessous ma requete. La table client est F_COMPTET, la table article est
F_ARTICLE, et la table des ventes est F_DOCLIGNE...
Par avance merci

Select ALL F_COMPTET.RE_No, Editeur, fCptT.CT_Statistique01,
fCptT.CT_Statistique02, fCptT.CT_Num, fCptT.CT_Intitule, SemSortie, annee,
mois, AR_Ref, AR_Design, FA_CodeFamille, Date_Sortie, QCmde, QLivr
from
F_COMPTET fCptT,
(SELECT Editeur, cumligne.CT_Num, SemSortie, Mois, Annee, AR_Ref, AR_Design,
FA_CodeFamille, Date_Sortie, SUM(QCmde) as QCmde
FROM
--Commandes en cours
(SELECT Editeur_Fournisseur as Editeur, fDoc.CT_Num, fArt.AR_Ref,
fArt.AR_Design, fArt.FA_CodeFamille, fArt.Date_Sortie, fDoc.DO_Type,
Datepart(ww, fArt.Date_Sortie) SemSortie, Month(fDoc.DO_Date) Mois ,
Year(fDoc.DO_Date) Annee,
(CASE WHEN fDoc.DO_Type>=4 and fDoc.DO_Type<=5
THEN -DL_Qte
ELSE DL_Qte
END) QCmde
FROM F_DOCLIGNE fDoc, F_ARTICLE fArt, F_DOCENTETE fEnt
WHERE (fEnt.DO_Type = fDoc.DO_Type and fEnt.DO_Piece = fDoc.DO_Piece
and fDoc.DO_Domaine=0 and fDoc.DO_Type=1
and fDoc.DL_Valorise=1
and fDoc.DL_TRemExep<2
and fDoc.DO_Date>='01-01-2007'
and fDoc.DO_Date<='31-12-2009'
and fDoc.DL_NonLivre=0 and fArt.AR_Refýoc.AR_Ref
)

) cumligne

GROUP BY cumligne.CT_Num, cumligne.AR_Ref, AR_Design, FA_CodeFamille,
Date_Sortie, SemSortie, Annee, Mois, Editeur)TotCumLigne
LEFT OUTER JOIN F_COMPTET On F_COMPTET.CT_Num=TotCumligne.CT_Num
where TotCumLigne.CT_Num = convert(varbinary,fCptT.CT_Num)
order by ar_ref, ct_statistique01


Avatar
Sylvain Lafontaine
Première des choses, vous devriez mentionner la version de SQL-Server que
vous utilisez. Deuxièmement, enlever les champs superflus afin de faciliter
la compréhension ne serait pas une mauvaide idée non plus. Le fait que vous
utilisiez également l'ancienne syntaxe pour faire votre join entre la table
F_COMPTET et la sous-requête TotCumLigne ainsi qu'entre les tables
F_DOCLIGNE, F_ARTICLE, F_DOCENTETE dans la sous-requête cumligne est
également incompréhensible; on dirait que vous cherchez à faire le plus
illisible possible.

Pour ce qui est de votre problème, le champ DL_Qte provient d'une des trois
tables F_DOCLIGNE, F_ARTICLE, F_DOCENTETE mais on ne sait pas de laquelle,
alors on va être bien en peine de dire comment modifier votre requête.
Problablement que vous devez changer un de vos INNER JOIN par un LEFT JOIN
et tester la valeur pour DL_Qte afin de la mettre à zéro si nulle.

Il est également possible que le Left Join soit à mettre entre la table
F_COMPTET et la sous-requête TotCumLigne; cela dépend beaucoup de la
signification de vos tables et de ce que vous cherchez à faire.

--
Sylvain Lafontaine, ing.
MVP - Technologies Virtual-PC
E-mail: sylvain aei ca (fill the blanks, no spam please)


"Marc" wrote in message
news:
Bonjour,
Je dispose une requete qui me renvoie les qté d'articles en commande par
clients (ci dessous).
Chaque client qui a passé une commande est donc intégré à ma requête et je
peux donc voir ce qu'un client a commandé.
Mon besoin est de voir aussi ce que le client n'a pas commandé. J'ai donc
besoin d'intégrer au résultat de ma requête les clients qui n'ont pas
commandé les articles de ma base. Pour chaque couple (client, article)
j'ai
donc besoin d'avoir le résultat, mais avec la quantité (DL_Qte) = 0.
Quelqu'un peut-il m'aider?
Ci dessous ma requete. La table client est F_COMPTET, la table article est
F_ARTICLE, et la table des ventes est F_DOCLIGNE...
Par avance merci

Select ALL F_COMPTET.RE_No, Editeur, fCptT.CT_Statistique01,
fCptT.CT_Statistique02, fCptT.CT_Num, fCptT.CT_Intitule, SemSortie, annee,
mois, AR_Ref, AR_Design, FA_CodeFamille, Date_Sortie, QCmde, QLivr
from
F_COMPTET fCptT,
(SELECT Editeur, cumligne.CT_Num, SemSortie, Mois, Annee, AR_Ref,
AR_Design,
FA_CodeFamille, Date_Sortie, SUM(QCmde) as QCmde
FROM
--Commandes en cours
(SELECT Editeur_Fournisseur as Editeur, fDoc.CT_Num, fArt.AR_Ref,
fArt.AR_Design, fArt.FA_CodeFamille, fArt.Date_Sortie, fDoc.DO_Type,
Datepart(ww, fArt.Date_Sortie) SemSortie, Month(fDoc.DO_Date) Mois ,
Year(fDoc.DO_Date) Annee,
(CASE WHEN fDoc.DO_Type>=4 and fDoc.DO_Type<=5
THEN -DL_Qte
ELSE DL_Qte
END) QCmde
FROM F_DOCLIGNE fDoc, F_ARTICLE fArt, F_DOCENTETE fEnt
WHERE (fEnt.DO_Type = fDoc.DO_Type and fEnt.DO_Piece = fDoc.DO_Piece
and fDoc.DO_Domaine=0 and fDoc.DO_Type=1
and fDoc.DL_Valorise=1
and fDoc.DL_TRemExep<2
and fDoc.DO_Date>='01-01-2007'
and fDoc.DO_Date<='31-12-2009'
and fDoc.DL_NonLivre=0 and fArt.AR_Refýoc.AR_Ref
)

) cumligne

GROUP BY cumligne.CT_Num, cumligne.AR_Ref, AR_Design, FA_CodeFamille,
Date_Sortie, SemSortie, Annee, Mois, Editeur)TotCumLigne
LEFT OUTER JOIN F_COMPTET On F_COMPTET.CT_Num=TotCumligne.CT_Num
where TotCumLigne.CT_Num = convert(varbinary,fCptT.CT_Num)
order by ar_ref, ct_statistique01