et un fichier "Prix" avec les prix actuels
IDProduit Date Prix
111 01.01.07 10.00
111 01.04.07 13.00
Au 30.6., j'aimerais obtenir la quantité, le coût et le prix actuel
Pour avoir les totaux des mouvements je n'ai pas de problème. Pour
obtenir également le prix courant correspondant à la date en question,
je fais le suivant. Il n'y a pas d'erreur, mais avec cette solution la
requête ne trouve que l'enregistrement correct d'un seul produit:
SELECT IDProduit, SUM(Quantite) AS Quantite, SUM(Quantite*Cout) AS
ValCout, SUM(Quantite*PrixFiltre.Prix) AS valPrix
FROM Mouvements
LEFT OUTER JOIN
(SELECT BOTTOM 1 Date, IDProduit, Prix FROM Prix
WHERE Date <= {pDateFin}) AS PrixFiltre
ON (Journal.IDProduit = PrixFiltre.IDProduit)
Group BY IDProduit
Je n'arrive pas à trouver la bonne solution pour obtenir les derniers
prix de tous les produits.
et un fichier "Prix" avec les prix actuels IDProduit Date Prix 111 01.01.07 10.00 111 01.04.07 13.00
Au 30.6., j'aimerais obtenir la quantité, le coût et le prix actuel
Pour avoir les totaux des mouvements je n'ai pas de problème. Pour obtenir également le prix courant correspondant à la date en question, je fais le suivant. Il n'y a pas d'erreur, mais avec cette solution la requête ne trouve que l'enregistrement correct d'un seul produit:
SELECT IDProduit, SUM(Quantite) AS Quantite, SUM(Quantite*Cout) AS ValCout, SUM(Quantite*PrixFiltre.Prix) AS valPrix FROM Mouvements LEFT OUTER JOIN (SELECT BOTTOM 1 Date, IDProduit, Prix FROM Prix WHERE Date <= {pDateFin}) AS PrixFiltre ON (Journal.IDProduit = PrixFiltre.IDProduit) Group BY IDProduit
Je n'arrive pas à trouver la bonne solution pour obtenir les derniers prix de tous les produits.
et un fichier "Prix" avec les prix actuels
IDProduit Date Prix
111 01.01.07 10.00
111 01.04.07 13.00
Au 30.6., j'aimerais obtenir la quantité, le coût et le prix actuel
Pour avoir les totaux des mouvements je n'ai pas de problème. Pour
obtenir également le prix courant correspondant à la date en question,
je fais le suivant. Il n'y a pas d'erreur, mais avec cette solution la
requête ne trouve que l'enregistrement correct d'un seul produit:
SELECT IDProduit, SUM(Quantite) AS Quantite, SUM(Quantite*Cout) AS
ValCout, SUM(Quantite*PrixFiltre.Prix) AS valPrix
FROM Mouvements
LEFT OUTER JOIN
(SELECT BOTTOM 1 Date, IDProduit, Prix FROM Prix
WHERE Date <= {pDateFin}) AS PrixFiltre
ON (Journal.IDProduit = PrixFiltre.IDProduit)
Group BY IDProduit
Je n'arrive pas à trouver la bonne solution pour obtenir les derniers
prix de tous les produits.
et un fichier "Prix" avec les prix actuels IDProduit Date Prix 111 01.01.07 10.00 111 01.04.07 13.00
Au 30.6., j'aimerais obtenir la quantité, le coût et le prix actuel
Pour avoir les totaux des mouvements je n'ai pas de problème. Pour obtenir également le prix courant correspondant à la date en question, je fais le suivant. Il n'y a pas d'erreur, mais avec cette solution la requête ne trouve que l'enregistrement correct d'un seul produit:
SELECT IDProduit, SUM(Quantite) AS Quantite, SUM(Quantite*Cout) AS ValCout, SUM(Quantite*PrixFiltre.Prix) AS valPrix FROM Mouvements LEFT OUTER JOIN (SELECT BOTTOM 1 Date, IDProduit, Prix FROM Prix WHERE Date <= {pDateFin}) AS PrixFiltre ON (Journal.IDProduit = PrixFiltre.IDProduit) Group BY IDProduit
Je n'arrive pas à trouver la bonne solution pour obtenir les derniers prix de tous les produits.
Merci pour vos idées.
Mat
Albert
Bonjour,
Si vous ne le connaissez pas, il existe un document sur les jointures très bien documenté avec exemples de code sur
http://sql.developpez.com/sqlaz/jointures/
Le problème ne viendrait pas d'un manque de précision dans l'utilisation des fichiers ? Vous avez également un fichier "Prix" qui contient une rubrique "Prix" ? Utilisation de < PrixFiltre > qui me parait ambigue ?
SELECT IDProduit...
SELECT Mouvements.IDProduit
Je reste perplexe également sur la syntaxe de
LEFT OUTER JOIN
Ne faudait il pas plustôt ;
LEFT OUTER JOIN Prix
La rubrique Date étant reprise dans tous les fichiers ne faudrait il pas apporter la précision du fichier
WHERE Date <= {pDateFin}) AS PrixFiltre
Maintenant je ne comprend pas < {pDateFin}) AS PrixFiltre > alors que au début de botre code vous avez
SUM(Quantite*PrixFiltre.Prix) AS valPrix
Cordialement
Albert
Bonjour,
Si vous ne le connaissez pas, il existe un document sur les jointures
très bien documenté avec exemples de code sur
http://sql.developpez.com/sqlaz/jointures/
Le problème ne viendrait pas d'un manque de précision dans
l'utilisation des fichiers ?
Vous avez également un fichier "Prix" qui contient une rubrique
"Prix" ?
Utilisation de < PrixFiltre > qui me parait ambigue ?
SELECT IDProduit...
SELECT Mouvements.IDProduit
Je reste perplexe également sur la syntaxe de
LEFT OUTER JOIN
Ne faudait il pas plustôt ;
LEFT OUTER JOIN Prix
La rubrique Date étant reprise dans tous les fichiers ne faudrait il
pas apporter la précision du fichier
WHERE Date <= {pDateFin}) AS PrixFiltre
Maintenant je ne comprend pas < {pDateFin}) AS PrixFiltre > alors
que au début de botre code vous avez
Si vous ne le connaissez pas, il existe un document sur les jointures très bien documenté avec exemples de code sur
http://sql.developpez.com/sqlaz/jointures/
Le problème ne viendrait pas d'un manque de précision dans l'utilisation des fichiers ? Vous avez également un fichier "Prix" qui contient une rubrique "Prix" ? Utilisation de < PrixFiltre > qui me parait ambigue ?
SELECT IDProduit...
SELECT Mouvements.IDProduit
Je reste perplexe également sur la syntaxe de
LEFT OUTER JOIN
Ne faudait il pas plustôt ;
LEFT OUTER JOIN Prix
La rubrique Date étant reprise dans tous les fichiers ne faudrait il pas apporter la précision du fichier
WHERE Date <= {pDateFin}) AS PrixFiltre
Maintenant je ne comprend pas < {pDateFin}) AS PrixFiltre > alors que au début de botre code vous avez
SUM(Quantite*PrixFiltre.Prix) AS valPrix
Cordialement
Albert
mat
Albert wrote:
Bonjour,
Si vous ne le connaissez pas, il existe un document sur les jointures très bien documenté avec exemples de code sur
http://sql.developpez.com/sqlaz/jointures/
Bonjour, et merci pour la réponse.
Je connais ce site excellent et l'ai revisité, malheureusement sans trouver de solution à mon problème.
...
Maintenant je ne comprend pas < {pDateFin}) AS PrixFiltre > alors que au début de botre code vous avez
SUM(Quantite*PrixFiltre.Prix) AS valPrix
PrixFiltre est l'alias pour un filtre sur le fichier Prix. Ca fonctionne, mais à cause de "Top 1" uniquement pour un Produit au lieu de tous.
***************
J'arrive maintenant à trouver ce qu'il me faut en limitant la requête à un seul fichier:
select Value.IDProduct, Value.Date, Value.Value FROM Value WHERE Date IN (SELECT MAX(Date) FROM Value AS P WHERE P.Date <= {pDate} and P.IDProduct = Value.IDProduct GROUP BY P.IDProduct) ORDER BY IDProduct
mais je n'arrive pas à intégrer cette sous-requête lorsque d'autres fichiers sont liés et qu'il y a des calculs sur ceux-ci:
SELECT Journal.IDProduct, Product.Name AS ProdName, SUM(Journal.Number) AS Number, SUM(Journal.Number*Journal.Cost) AS ValCost, SUM(Journal.Number*Value.Value) AS valPrice FROM Journal Left OUTER JOIN Product on (Journal.IDProduct = Product.IDProduct), Journal Left OUTER JOIN Value on (Journal.IDProduct = Value.IDProduct) WHERE Value.Date IN (SELECT Max(Value.Date) from Value AS V WHERE V.date <={pDateTo} AND V.IDProduct = Value.IDProduct Group by V.IDProduct) GROUP by IDProduct, ProdName ORDER by IDProduct
Cela produit une "erreur système inattendu".
Quelqu'un sait comment résoudre, svp?
Merci
Mat
Albert wrote:
Bonjour,
Si vous ne le connaissez pas, il existe un document sur les jointures
très bien documenté avec exemples de code sur
http://sql.developpez.com/sqlaz/jointures/
Bonjour, et merci pour la réponse.
Je connais ce site excellent et l'ai revisité, malheureusement
sans trouver de solution à mon problème.
...
Maintenant je ne comprend pas < {pDateFin}) AS PrixFiltre > alors
que au début de botre code vous avez
SUM(Quantite*PrixFiltre.Prix) AS valPrix
PrixFiltre est l'alias pour un filtre sur le fichier Prix. Ca
fonctionne, mais à cause de "Top 1" uniquement pour un Produit au lieu
de tous.
***************
J'arrive maintenant à trouver ce qu'il me faut en limitant la requête à
un seul fichier:
select Value.IDProduct, Value.Date, Value.Value
FROM Value
WHERE Date IN (SELECT MAX(Date) FROM Value AS P WHERE P.Date <= {pDate}
and P.IDProduct = Value.IDProduct GROUP BY P.IDProduct)
ORDER BY IDProduct
mais je n'arrive pas à intégrer cette sous-requête lorsque d'autres
fichiers sont liés et qu'il y a des calculs sur ceux-ci:
SELECT Journal.IDProduct, Product.Name AS ProdName, SUM(Journal.Number)
AS Number, SUM(Journal.Number*Journal.Cost) AS ValCost,
SUM(Journal.Number*Value.Value) AS valPrice
FROM Journal Left OUTER JOIN Product
on (Journal.IDProduct = Product.IDProduct),
Journal Left OUTER JOIN Value
on (Journal.IDProduct = Value.IDProduct)
WHERE
Value.Date IN (SELECT Max(Value.Date) from Value AS V WHERE V.date
<={pDateTo} AND V.IDProduct = Value.IDProduct Group by V.IDProduct)
GROUP by IDProduct, ProdName
ORDER by IDProduct
Si vous ne le connaissez pas, il existe un document sur les jointures très bien documenté avec exemples de code sur
http://sql.developpez.com/sqlaz/jointures/
Bonjour, et merci pour la réponse.
Je connais ce site excellent et l'ai revisité, malheureusement sans trouver de solution à mon problème.
...
Maintenant je ne comprend pas < {pDateFin}) AS PrixFiltre > alors que au début de botre code vous avez
SUM(Quantite*PrixFiltre.Prix) AS valPrix
PrixFiltre est l'alias pour un filtre sur le fichier Prix. Ca fonctionne, mais à cause de "Top 1" uniquement pour un Produit au lieu de tous.
***************
J'arrive maintenant à trouver ce qu'il me faut en limitant la requête à un seul fichier:
select Value.IDProduct, Value.Date, Value.Value FROM Value WHERE Date IN (SELECT MAX(Date) FROM Value AS P WHERE P.Date <= {pDate} and P.IDProduct = Value.IDProduct GROUP BY P.IDProduct) ORDER BY IDProduct
mais je n'arrive pas à intégrer cette sous-requête lorsque d'autres fichiers sont liés et qu'il y a des calculs sur ceux-ci:
SELECT Journal.IDProduct, Product.Name AS ProdName, SUM(Journal.Number) AS Number, SUM(Journal.Number*Journal.Cost) AS ValCost, SUM(Journal.Number*Value.Value) AS valPrice FROM Journal Left OUTER JOIN Product on (Journal.IDProduct = Product.IDProduct), Journal Left OUTER JOIN Value on (Journal.IDProduct = Value.IDProduct) WHERE Value.Date IN (SELECT Max(Value.Date) from Value AS V WHERE V.date <={pDateTo} AND V.IDProduct = Value.IDProduct Group by V.IDProduct) GROUP by IDProduct, ProdName ORDER by IDProduct
Cela produit une "erreur système inattendu".
Quelqu'un sait comment résoudre, svp?
Merci
Mat
mat
J'ai fini par trouver une solution qui marche.
Salutations Mat
ds1,ds2 est une Source de Données dDate est Date = "20070101" sQuery est chaîne
//1ère requête sQuery = "select value.idProduct, value.Date, value.Value " sQuery += " from value " sQuery += " where Date IN (SELECT max(Date) from Value AS V where v.date <= '" + dDate + "' and v.IDProduct = Value.IDProduct group by v.IDProduct) " sQuery +=" order by idProduct "
SI HExécuteRequêteSQL(ds1,hRequêteDéfaut, sQuery) ALORS SI HLitPremier(ds1) ALORS FOR ALL ds1 trace(ds1.idProduct, ds1.date, ds1.Value) end FIN SINON Info(HErreurInfo) RETOUR FIN
//2e requête sQuery = "SELECT journal.IdSecurity, Security.Name AS ProdName, SUM(Journal.Number) AS Number, SUM(Journal.number * Journal.Cost) AS ValCost, SUM(Journal.Number * ds1.Value) AS valPrice " sQuery += " FROM Journal INNER JOIN Security " sQuery += " ON (Journal.IdSecurity = security.IdSecurity), " sQuery += " Journal LEFT OUTER JOIN ds1 " sQuery += " ON (Journal.IdSecurity = ds1.IdSecurity) " sQuery += " WHERE " sQuery += " Journal.Date <= '" + dDate + "' " sQuery += " GROUP BY IdSecurity, ProdName " sQuery += " ORDER BY IdSecurity "
SI HExécuteRequêteSQL(ds2,hRequêteDéfaut, sQuery) ALORS SI HLitPremier(ds2) ALORS Info(ds2.idsecurity, ds2.ProdName, ds2.Number, ds2.ValCost, ds2.ValPrice) FIN SINON Info(HErreurInfo) RETOUR FIN
J'ai fini par trouver une solution qui marche.
Salutations
Mat
ds1,ds2 est une Source de Données
dDate est Date = "20070101"
sQuery est chaîne
//1ère requête
sQuery = "select value.idProduct, value.Date, value.Value "
sQuery += " from value "
sQuery += " where Date IN (SELECT max(Date) from Value AS V where v.date
<= '" + dDate + "' and v.IDProduct = Value.IDProduct group by v.IDProduct) "
sQuery +=" order by idProduct "
SI HExécuteRequêteSQL(ds1,hRequêteDéfaut, sQuery) ALORS
SI HLitPremier(ds1) ALORS
FOR ALL ds1
trace(ds1.idProduct, ds1.date, ds1.Value)
end
FIN
SINON
Info(HErreurInfo)
RETOUR
FIN
//2e requête
sQuery = "SELECT journal.IdSecurity, Security.Name AS ProdName,
SUM(Journal.Number) AS Number, SUM(Journal.number * Journal.Cost) AS
ValCost, SUM(Journal.Number * ds1.Value) AS valPrice "
sQuery += " FROM Journal INNER JOIN Security "
sQuery += " ON (Journal.IdSecurity = security.IdSecurity), "
sQuery += " Journal LEFT OUTER JOIN ds1 "
sQuery += " ON (Journal.IdSecurity = ds1.IdSecurity) "
sQuery += " WHERE "
sQuery += " Journal.Date <= '" + dDate + "' "
sQuery += " GROUP BY IdSecurity, ProdName "
sQuery += " ORDER BY IdSecurity "
SI HExécuteRequêteSQL(ds2,hRequêteDéfaut, sQuery) ALORS
SI HLitPremier(ds2) ALORS
Info(ds2.idsecurity, ds2.ProdName, ds2.Number, ds2.ValCost, ds2.ValPrice)
FIN
SINON
Info(HErreurInfo)
RETOUR
FIN
ds1,ds2 est une Source de Données dDate est Date = "20070101" sQuery est chaîne
//1ère requête sQuery = "select value.idProduct, value.Date, value.Value " sQuery += " from value " sQuery += " where Date IN (SELECT max(Date) from Value AS V where v.date <= '" + dDate + "' and v.IDProduct = Value.IDProduct group by v.IDProduct) " sQuery +=" order by idProduct "
SI HExécuteRequêteSQL(ds1,hRequêteDéfaut, sQuery) ALORS SI HLitPremier(ds1) ALORS FOR ALL ds1 trace(ds1.idProduct, ds1.date, ds1.Value) end FIN SINON Info(HErreurInfo) RETOUR FIN
//2e requête sQuery = "SELECT journal.IdSecurity, Security.Name AS ProdName, SUM(Journal.Number) AS Number, SUM(Journal.number * Journal.Cost) AS ValCost, SUM(Journal.Number * ds1.Value) AS valPrice " sQuery += " FROM Journal INNER JOIN Security " sQuery += " ON (Journal.IdSecurity = security.IdSecurity), " sQuery += " Journal LEFT OUTER JOIN ds1 " sQuery += " ON (Journal.IdSecurity = ds1.IdSecurity) " sQuery += " WHERE " sQuery += " Journal.Date <= '" + dDate + "' " sQuery += " GROUP BY IdSecurity, ProdName " sQuery += " ORDER BY IdSecurity "
SI HExécuteRequêteSQL(ds2,hRequêteDéfaut, sQuery) ALORS SI HLitPremier(ds2) ALORS Info(ds2.idsecurity, ds2.ProdName, ds2.Number, ds2.ValCost, ds2.ValPrice) FIN SINON Info(HErreurInfo) RETOUR FIN