PC SOFT

GRUPOS DE DISCUSSÃO PROFISSIONAL
WINDEVWEBDEV e WINDEV Mobile

Inicio → WINDEV 2024 → Pb requête avec SUM
Pb requête avec SUM
Iniciado por guest, jul., 01 2005 3:55 PM - 4 respostas
Publicado em julho, 01 2005 - 3:55 PM
Ne peut -on pas faire une requête du genre :

SELECT FACTURE.fact_No,fact_Date
FROM FACTURE,REGLER
WHERE FACTURE.fact_No=REGLER.fact_No
HAVING SUM(regler_Mont)<fact_Totmont

ici FACTURe est une table et REGLER une associaition entre FACTURE et REGLEMENT (0,n === REGLER === 0,n)
En fait dans regler il y a tous les règlement pour une facture. En effet, une facture peut être régler en plusieurs fois.
Le total de la facture est dans FACTURE avec fact_Totmont

Moi je veux en 1 requète, toutes les factures qui ne sont pas régler totalement.
Et je n'obtient aucun résultat alors que j'en ai plein !!!

Merci
Publicado em julho, 01 2005 - 4:13 PM
Petalele a écrit :
Ne peut -on pas faire une requête du genre :

SELECT FACTURE.fact_No,fact_Date
FROM FACTURE,REGLER
WHERE FACTURE.fact_No=REGLER.fact_No
HAVING SUM(regler_Mont)<fact_Totmont

ici FACTURe est une table et REGLER une associaition entre FACTURE et REGLEMENT (0,n === REGLER === 0,n)
En fait dans regler il y a tous les règlement pour une facture. En effet, une facture peut être régler en plusieurs fois.
Le total de la facture est dans FACTURE avec fact_Totmont

Moi je veux en 1 requète, toutes les factures qui ne sont pas régler totalement.
Et je n'obtient aucun résultat alors que j'en ai plein !!!

Merci




doit manquer un group by quelque part ...

SELECT FACTURE.fact_No,fact_Date
FROM FACTURE,REGLER
WHERE FACTURE.fact_No=REGLER.fact_No
GROUP BY FACTURE.fact_No, FACTURE.fact_Date <===
HAVING SUM(regler_Mont) < fact_Totmont

Damien
Publicado em julho, 02 2005 - 7:27 PM
Il faut sélectionner également 'regler_Mont' pour que le SUM fonctionne:

SELECT FACTURE.fact_No, fact_Date, SUM(regler_Mont)
FROM FACTURE,REGLER
WHERE FACTURE.fact_No=REGLER.fact_No
GROUP BY FACTURE.fact_No, FACTURE.fact_Date
HAVING SUM(regler_Mont) < fact_Totmont

Christian Potvin
Beaulieu Canada

Petalele a écrit :
Ne peut -on pas faire une requête du genre :

SELECT FACTURE.fact_No,fact_Date
FROM FACTURE,REGLER
WHERE FACTURE.fact_No=REGLER.fact_No
HAVING SUM(regler_Mont)

ici FACTURe est une table et REGLER une associaition entre FACTURE et REGLEMENT (0,n === REGLER === 0,n)
En fait dans regler il y a tous les règlement pour une facture. En effet, une facture peut être régler en plusieurs fois.
Le total de la facture est dans FACTURE avec fact_Totmont

Moi je veux en 1 requète, toutes les factures qui ne sont pas régler totalement.
Et je n'obtient aucun résultat alors que j'en ai plein !!!

Merci




doit manquer un group by quelque part ...

SELECT FACTURE.fact_No,fact_Date
FROM FACTURE,REGLER
WHERE FACTURE.fact_No=REGLER.fact_No
GROUP BY FACTURE.fact_No, FACTURE.fact_Date <===
HAVING SUM(regler_Mont) < fact_Totmont

Dami
Publicado em julho, 04 2005 - 11:58 AM
En fait voilà ma re^quête finale :

SELECT FACTURE.fact_No,fact_Date,fact_Totmont,SUM(regler_Mont) AS reglement
FROM FACTURE LEFT JOIN REGLER ON (FACTURE.fact_No=REGLER.fact_No)
GROUP BY FACTURE.fact_No,fact_Date,fact_Totmont
HAVING SUM(regler_Mont)<fact_Totmont
ORDER BY fact_Date

Le problème est que j'obtient 52 résultats au lieu de 286....
Je ne voit pas trop d'où peut venir le problème. Le fait de faire un GROUP BY n'interfère pas dans le INNER JOIN ?
Publicado em julho, 04 2005 - 11:33 PM
Bonjour,

Le LEFT JOIN ne tiens pas compte des factures qui n'ont aucun paiement dans le fichier REGLER.

Pour avoir toutes les factures pour lesquelles il y a paiement PARTIEL dans REGLER et toutes celles qui n'ont AUCUN paiement dans REGLER, il faut faire ceci:

SELECT FACTURE.fact_No, fact_Date, fact_Totmont, SUM(regler_Mont) AS reglement
FROM FACTURE, REGLER
WHERE FACTURE.fact_No = REGLER.fact_No
GROUP BY FACTURE.fact_No, fact_Date, fact_Totmont
HAVING SUM(regler_Mont) < fact_Totmont
UNION ALL
SELECT FACTURE.fact_No, fact_Date, fact_Totmont, 0 AS reglement
FROM FACTURE
WHERE FACTURE.fact_No NOT IN
(SELECT DISTINCT REGLER.fact_No FROM REGLER)
ORDER BY fact_Date

En espérant que cela va régler ton problème...

Christian Potvin
Beaulieu Canada